shifty 0.3.0 → 0.4.0

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: 46d6ec38da041475fa499d8d79042e685d9eb3c4ab1dbce24ab70579b466acc2
4
- data.tar.gz: b8cc19ee79ad7321e113f8ec7311f52020566506ff8a7e84dc36c6eb840e57dd
3
+ metadata.gz: 60586c4caa01e362be844ef009bc5b90419524de80de66a18286bbc71de40b8e
4
+ data.tar.gz: fc3d174365d07ed8d202630db19ab316749f42a24947ab549bc503e460fd5478
5
5
  SHA512:
6
- metadata.gz: c11b09e67ff91d611ddedff9404d81b043f9211e0a96a452ff6d9fde0480955e65050b00fb6a71cabc867e35ef3ae28815943d371b56c1a3a1a425a80e5847f0
7
- data.tar.gz: 46d0ef549da9cdfc57043b2563d1a4549abb44abffbe424228b18d97758e871e1ad279c9e5d8824d584a1ab66e43100a514c5ccb82fcce161280318d06762a53
6
+ metadata.gz: 5c8d7e4c9acec961c018ead8f69b422d25fae27ae69f78fe482eff067153d5c7937a5932e98ac9f941d753c281c221c0ef8e75ca68e70b44904e586909a34cf3
7
+ data.tar.gz: a8f3a744fd32368969a609fb64326fc0c60c73efa4e45eb9adaea773efcbb103049ef6dd04dda6fd36bdf1a2c2d2f80e1af4354adacb66ebdfa33a9347e9cd0b
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "10:00"
8
+ open-pull-requests-limit: 10
@@ -0,0 +1,74 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ "main" ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ "main" ]
20
+ schedule:
21
+ - cron: '29 13 * * 5'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v3
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v2
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+
52
+ # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
53
+ # queries: security-extended,security-and-quality
54
+
55
+
56
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
57
+ # If this step fails, then you should remove it and run the build manually (see below)
58
+ - name: Autobuild
59
+ uses: github/codeql-action/autobuild@v2
60
+
61
+ # ℹ️ Command-line programs to run using the OS shell.
62
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
63
+
64
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
65
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
66
+
67
+ # - run: |
68
+ # echo "Run, Build Application using script"
69
+ # ./location_of_script_within_repo/buildscript.sh
70
+
71
+ - name: Perform CodeQL Analysis
72
+ uses: github/codeql-action/analyze@v2
73
+ with:
74
+ category: "/language:${{matrix.language}}"
@@ -0,0 +1,36 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: tests
9
+
10
+ on:
11
+ push:
12
+ branches: [ main ]
13
+ pull_request:
14
+ branches: [ main ]
15
+
16
+ jobs:
17
+ test:
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ matrix:
21
+ ruby-version: ['2.6', '2.7', '3.0']
22
+
23
+ steps:
24
+ - uses: actions/checkout@v2
25
+ - name: Set up Ruby
26
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
27
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
28
+ # uses: ruby/setup-ruby@v1
29
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
30
+ with:
31
+ ruby-version: ${{ matrix.ruby-version }}
32
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
33
+ - name: Check code style
34
+ run: bundle exec standardrb
35
+ - name: Run tests
36
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  /.bundle/
2
+ /.vscode/
2
3
  /.yardoc
3
4
  /_yardoc/
4
5
  /coverage/
@@ -10,4 +11,6 @@
10
11
  # rspec failure tracking
11
12
  .rspec_status
12
13
 
14
+ .rubocop.yml
15
+
13
16
  Gemfile.lock
data/.standard.yml ADDED
@@ -0,0 +1,3 @@
1
+ ignore:
2
+ - '**/*':
3
+ - Layout/ExtraSpacing
data/Gemfile CHANGED
@@ -1,6 +1,9 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| 'https://github.com/#{repo_name}' }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ gem "guard"
6
+ gem "guard-rspec", require: false
4
7
 
5
8
  # Specify your gem's dependencies in shifty.gemspec
6
9
  gemspec
data/Guardfile ADDED
@@ -0,0 +1,42 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ # Note: The cmd option is now required due to the increasing number of ways
19
+ # rspec may be run, below are examples of the most common uses.
20
+ # * bundler: 'bundle exec rspec'
21
+ # * bundler binstubs: 'bin/rspec'
22
+ # * spring: 'bin/rspec' (This will use spring if running and you have
23
+ # installed the spring binstubs per the docs)
24
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
25
+ # * 'just' rspec: 'rspec'
26
+
27
+ guard :rspec, cmd: "bundle exec rspec" do
28
+ require "guard/rspec/dsl"
29
+ dsl = Guard::RSpec::Dsl.new(self)
30
+
31
+ # Feel free to open issues for suggestions and improvements
32
+
33
+ # RSpec files
34
+ rspec = dsl.rspec
35
+ watch(rspec.spec_helper) { rspec.spec_dir }
36
+ watch(rspec.spec_support) { rspec.spec_dir }
37
+ watch(rspec.spec_files)
38
+
39
+ # Ruby files
40
+ ruby = dsl.ruby
41
+ dsl.watch_spec_files_for(ruby.lib_files)
42
+ end
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/shifty.svg)](https://badge.fury.io/rb/shifty)
2
- [![Build Status](https://travis-ci.org/joelhelbling/shifty.png)](https://travis-ci.org/joelhelbling/shifty)
2
+ [![Tests](https://github.com/joelhelbling/shifty/actions/workflows/ruby.yml/badge.svg)](https://github.com/joelhelbling/shifty/actions/workflows/ruby.yml)
3
3
  [![Maintainability](https://api.codeclimate.com/v1/badges/950ded888350c1124348/maintainability)](https://codeclimate.com/github/joelhelbling/shifty/maintainability)
4
4
  [![Test Coverage](https://api.codeclimate.com/v1/badges/950ded888350c1124348/test_coverage)](https://codeclimate.com/github/joelhelbling/shifty/test_coverage)
5
5
 
@@ -21,7 +21,7 @@ And then execute:
21
21
 
22
22
  Or install it yourself:
23
23
 
24
- $ gem install steplader
24
+ $ gem install shifty
25
25
 
26
26
  And then use it:
27
27
 
@@ -344,7 +344,7 @@ worker simply provides a nil.
344
344
 
345
345
  ## Origins of Shifty
346
346
 
347
- Shifty was Shifty, which grew out of experimentation with Ruby fibers, after reading
347
+ Shifty was [Stepladder](https://github.com/joelhelbling/stepladder), which grew out of experimentation with Ruby fibers, after reading
348
348
  [Dave Thomas' demo of Ruby fibers](http://pragdave.me/blog/2007/12/30/pipelines-using-fibers-in-ruby-19/),
349
349
  wherein he created a pipeline of fiber processes, emulating the style and syntax of the
350
350
  \*nix command line. I noticed that, courtesy of fibers' extremely low surface area,
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require "standard/rake"
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
- task :default => :spec
7
+ task default: :spec
data/_config.yml ADDED
@@ -0,0 +1 @@
1
+ theme: jekyll-theme-dinky
data/lib/shifty/dsl.rb CHANGED
@@ -2,7 +2,7 @@ module Shifty
2
2
  class WorkerInitializationError < StandardError; end
3
3
 
4
4
  module DSL
5
- def source_worker(argument=nil, &block)
5
+ def source_worker(argument = nil, &block)
6
6
  ensure_correct_arity_for!(argument, block)
7
7
 
8
8
  series = series_from(argument)
@@ -13,11 +13,10 @@ module Shifty
13
13
  Worker.new do
14
14
  series.each(&callable)
15
15
 
16
- while true do
16
+ loop do
17
17
  handoff nil
18
18
  end
19
19
  end
20
-
21
20
  end
22
21
 
23
22
  def relay_worker(&block)
@@ -28,10 +27,10 @@ module Shifty
28
27
  end
29
28
  end
30
29
 
31
- def side_worker(mode=:normal, &block)
30
+ def side_worker(mode = :normal, &block)
32
31
  ensure_regular_arity(block)
33
32
 
34
- Worker.new do |value|
33
+ Worker.new(tags: [:side_effect]) do |value|
35
34
  value.tap do |v|
36
35
  used_value = mode == :hardened ?
37
36
  Marshal.load(Marshal.dump(v)) : v
@@ -41,15 +40,15 @@ module Shifty
41
40
  end
42
41
  end
43
42
 
44
- def filter_worker(argument=nil, &block)
45
- if (block && argument.respond_to?(:call))
46
- throw_with 'You cannot supply two callables'
43
+ def filter_worker(argument = nil, &block)
44
+ if block && argument.respond_to?(:call)
45
+ throw_with "You cannot supply two callables"
47
46
  end
48
47
  callable = argument.respond_to?(:call) ? argument : block
49
48
  ensure_callable(callable)
50
49
 
51
50
  Worker.new do |value, supply|
52
- while value && !callable.call(value) do
51
+ while value && !callable.call(value)
53
52
  value = supply.shift
54
53
  end
55
54
  value
@@ -59,23 +58,23 @@ module Shifty
59
58
  class BatchContext < OpenStruct
60
59
  def batch_complete?(value, collection)
61
60
  value.nil? ||
62
- !! batch_full.call(value, collection)
61
+ !!batch_full.call(value, collection)
63
62
  end
64
63
  end
65
64
 
66
65
  def batch_worker(options = {gathering: 1}, &block)
67
66
  ensure_regular_arity(block) if block
68
67
  batch_full = block ||
69
- Proc.new { |_, batch| batch.size >= options[:gathering] }
68
+ proc { |_, batch| batch.size >= options[:gathering] }
70
69
 
71
- batch_context = BatchContext.new({ batch_full: batch_full })
70
+ batch_context = BatchContext.new({batch_full: batch_full})
72
71
 
73
72
  Worker.new(context: batch_context) do |value, supply, context|
74
73
  if value
75
74
  context.collection = [value]
76
75
  until context.batch_complete?(
77
- context.collection.last,
78
- context.collection
76
+ context.collection.last,
77
+ context.collection
79
78
  )
80
79
  context.collection << supply.shift
81
80
  end
@@ -92,7 +91,7 @@ module Shifty
92
91
  value
93
92
  else
94
93
  parts = [block.call(value)].flatten
95
- while parts.size > 1 do
94
+ while parts.size > 1
96
95
  handoff parts.shift
97
96
  end
98
97
  parts.shift
@@ -100,7 +99,7 @@ module Shifty
100
99
  end
101
100
  end
102
101
 
103
- def trailing_worker(trail_length=2)
102
+ def trailing_worker(trail_length = 2)
104
103
  trail = []
105
104
  Worker.new do |value, supply|
106
105
  if value
@@ -126,12 +125,12 @@ module Shifty
126
125
  private
127
126
 
128
127
  def throw_with(*msg)
129
- raise WorkerInitializationError.new([msg].flatten.join(' '))
128
+ raise WorkerInitializationError.new([msg].flatten.join(" "))
130
129
  end
131
130
 
132
131
  def ensure_callable(callable)
133
- unless callable && callable.respond_to?(:call)
134
- throw_with 'You must supply a callable'
132
+ unless callable&.respond_to?(:call)
133
+ throw_with "You must supply a callable"
135
134
  end
136
135
  end
137
136
 
@@ -147,20 +146,17 @@ module Shifty
147
146
  return unless block
148
147
  if argument
149
148
  ensure_regular_arity(block)
150
- else
151
- if block.arity > 0
152
- throw_with \
153
- 'Source worker cannot accept any arguments (arity == 0)'
154
- end
149
+ elsif block.arity > 0
150
+ throw_with \
151
+ "Source worker cannot accept any arguments (arity == 0)"
155
152
  end
156
153
  end
157
154
 
158
155
  def series_from(series)
159
156
  return if series.nil?
160
- case
161
- when series.respond_to?(:to_a)
157
+ if series.respond_to?(:to_a)
162
158
  series.to_a
163
- when series.respond_to?(:scan)
159
+ elsif series.respond_to?(:scan)
164
160
  series.scan(/./)
165
161
  else
166
162
  [series]
@@ -170,11 +166,10 @@ module Shifty
170
166
  def setup_callable_for(block, series)
171
167
  return block unless series
172
168
  if block
173
- return Proc.new { |value| handoff block.call(value) }
169
+ proc { |value| handoff block.call(value) }
174
170
  else
175
- return Proc.new { |value| handoff value }
171
+ proc { |value| handoff value }
176
172
  end
177
173
  end
178
-
179
174
  end
180
175
  end
data/lib/shifty/gang.rb CHANGED
@@ -1,46 +1,52 @@
1
- require 'shifty/roster'
1
+ require "shifty/roster"
2
+ require "shifty/taggable"
2
3
 
3
4
  module Shifty
4
5
  class Gang
5
- attr_accessor :workers
6
+ attr_reader :roster, :tags
6
7
 
7
- def initialize(workers=[])
8
- link(workers + [])
9
- end
8
+ include Taggable
10
9
 
11
- def roster
12
- workers
10
+ def initialize(workers = [], p = {})
11
+ @roster = Roster.new(workers)
12
+ self.criteria = p[:criteria]
13
+ self.tags = p[:tags]
13
14
  end
14
15
 
15
16
  def shift
16
- workers.last.shift
17
+ if criteria_passes?
18
+ roster.last.shift
19
+ else
20
+ roster.first.supply.shift
21
+ end
17
22
  end
18
23
 
19
24
  def ready_to_work?
20
- workers.first.ready_to_work?
25
+ roster.first.ready_to_work?
21
26
  end
22
27
 
23
28
  def supply
24
- workers.first.supply
29
+ roster.first.supply
25
30
  end
26
31
 
27
- def supply=(source_queue)
28
- workers.first.supply = source_queue
32
+ def supply=(supplier)
33
+ roster.first.supply = supplier
29
34
  end
30
35
 
31
- def supplies(subscribing_party)
32
- subscribing_party.supply = self
36
+ def supplies(subscribing_worker)
37
+ subscribing_worker.supply = self
38
+ subscribing_worker
33
39
  end
34
- alias_method :"|", :supplies
40
+ alias_method :|, :supplies
35
41
 
36
- private
42
+ def append(worker)
43
+ roster << worker
44
+ end
37
45
 
38
- def link(workers)
39
- @workers = [workers.shift]
40
- while worker = workers.shift do
41
- Roster[self] << worker
46
+ class << self
47
+ def [](*workers)
48
+ new workers
42
49
  end
43
50
  end
44
-
45
51
  end
46
52
  end
data/lib/shifty/roster.rb CHANGED
@@ -1,33 +1,30 @@
1
+ require "forwardable"
2
+
1
3
  module Shifty
2
- module Roster
3
- class << self
4
- def [](gang)
5
- RosterizedGang.new(gang)
6
- end
7
- end
8
- end
4
+ class Roster
5
+ extend Forwardable
9
6
 
10
- class RosterizedGang
11
- attr_reader :gang
7
+ attr_reader :workers
12
8
 
13
- def initialize(gang)
14
- @gang = gang
9
+ def initialize(workers = [])
10
+ @workers = []
11
+ workers.each do |worker|
12
+ push worker
13
+ end
15
14
  end
16
15
 
17
- def workers
18
- gang.workers
19
- end
16
+ def_delegators :workers, :first, :last
20
17
 
21
18
  def push(worker)
22
19
  if worker
23
- worker.supply = workers.last
20
+ worker.supply = workers.last unless workers.empty?
24
21
  workers << worker
25
22
  end
26
23
  end
27
- alias_method :"<<", :push
24
+ alias_method :<<, :push
28
25
 
29
26
  def pop
30
- gang.workers.pop.tap do |popped|
27
+ workers.pop.tap do |popped|
31
28
  popped.supply = nil
32
29
  end
33
30
  end
@@ -0,0 +1,21 @@
1
+ module Shifty
2
+ module Taggable
3
+ def tags=(tag_arg)
4
+ @tags = [tag_arg].flatten.compact
5
+ end
6
+
7
+ def criteria=(criteria_arg)
8
+ @criteria = [criteria_arg].flatten.compact
9
+ end
10
+
11
+ def has_tag?(tag)
12
+ @tags.include? tag
13
+ end
14
+
15
+ def criteria_passes?
16
+ return true if @criteria.empty?
17
+
18
+ @criteria.all? { |c| c.call(self) }
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Shifty
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/shifty/worker.rb CHANGED
@@ -1,18 +1,18 @@
1
- require 'ostruct'
1
+ require "ostruct"
2
+ require "shifty/taggable"
2
3
 
3
4
  module Shifty
4
5
  class Worker
5
- attr_reader :supply
6
-
7
- def initialize(p={}, &block)
8
- @supply = p[:supply]
9
- @task = block || p[:task]
10
- @context = p[:context] || OpenStruct.new
11
- # don't define default task here
12
- # because we want to allow for
13
- # an initialized worker to have
14
- # a task injected, including
15
- # method-based tasks.
6
+ attr_reader :supply, :tags
7
+
8
+ include Shifty::Taggable
9
+
10
+ def initialize(p = {}, &block)
11
+ @supply = p[:supply]
12
+ @task = block || p[:task]
13
+ @context = p[:context] || OpenStruct.new
14
+ self.criteria = p[:criteria]
15
+ self.tags = p[:tags]
16
16
  end
17
17
 
18
18
  def shift
@@ -24,11 +24,11 @@ module Shifty
24
24
  @task && (supply || !task_accepts_a_value?)
25
25
  end
26
26
 
27
- def supplies(subscribing_party)
28
- subscribing_party.supply = self
29
- subscribing_party
27
+ def supplies(subscribing_worker)
28
+ subscribing_worker.supply = self
29
+ subscribing_worker
30
30
  end
31
- alias_method :"|", :supplies
31
+ alias_method :|, :supplies
32
32
 
33
33
  def supply=(supplier)
34
34
  raise WorkerError.new("Worker is a source, and cannot accept a supply") unless suppliable?
@@ -50,16 +50,20 @@ module Shifty
50
50
  end
51
51
 
52
52
  def workflow
53
- @my_little_machine ||= Fiber.new do
53
+ @my_little_machine ||= Fiber.new {
54
54
  loop do
55
- value = supply && supply.shift
56
- Fiber.yield @task.call(value, supply, @context)
55
+ value = supply&.shift
56
+ if criteria_passes?
57
+ Fiber.yield @task.call(value, supply, @context)
58
+ else
59
+ Fiber.yield value
60
+ end
57
61
  end
58
- end
62
+ }
59
63
  end
60
64
 
61
65
  def default_task
62
- Proc.new { |value| value }
66
+ proc { |value| value }
63
67
  end
64
68
 
65
69
  def task_accepts_a_value?
@@ -67,13 +71,12 @@ module Shifty
67
71
  end
68
72
 
69
73
  def task_method_exists?
70
- self.methods.include? :task
74
+ methods.include? :task
71
75
  end
72
76
 
73
77
  def task_method_accepts_a_value?
74
- self.method(:task).arity > 0
78
+ method(:task).arity > 0
75
79
  end
76
-
77
80
  end
78
81
 
79
82
  class WorkerError < StandardError; end
data/lib/shifty.rb CHANGED
@@ -1,5 +1,5 @@
1
- require_relative 'shifty/version'
2
- require_relative 'shifty/worker'
3
- require_relative 'shifty/gang'
4
- require_relative 'shifty/roster'
5
- require_relative 'shifty/dsl'
1
+ require_relative "shifty/version"
2
+ require_relative "shifty/worker"
3
+ require_relative "shifty/gang"
4
+ require_relative "shifty/roster"
5
+ require_relative "shifty/dsl"
data/shifty.gemspec CHANGED
@@ -1,29 +1,29 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("../lib", __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'shifty/version'
3
+ require "shifty/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = 'shifty'
7
- spec.version = Shifty::VERSION
8
- spec.authors = ['Joel Helbling']
9
- spec.email = ['joel@joelhelbling.com']
6
+ spec.name = "shifty"
7
+ spec.version = Shifty::VERSION
8
+ spec.authors = ["Joel Helbling"]
9
+ spec.email = ["joel@joelhelbling.com"]
10
10
 
11
- spec.summary = %q{A functional framework aimed at extremely low coupling}
12
- spec.description = %q{Shifty provides tools for coordinating simple workers which consume a supplying queue and emit corresponding work products, valuing pure functions, carefully isolated side effects, and extremely low coupling.}
13
- spec.homepage = 'https://github.com/joelhelbling/shifty'
14
- spec.license = 'MIT'
11
+ spec.summary = "A functional framework aimed at extremely low coupling"
12
+ spec.description = "Shifty provides tools for coordinating simple workers which consume a supplying queue and emit corresponding work products, valuing pure functions, carefully isolated side effects, and extremely low coupling."
13
+ spec.homepage = "https://github.com/joelhelbling/shifty"
14
+ spec.license = "MIT"
15
15
 
16
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
17
  f.match(%r{^(test|spec|features)/})
18
18
  end
19
- spec.bindir = "exe"
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_development_dependency 'bundler', '~> 1.16'
24
- spec.add_development_dependency 'rake', '~> 10.0'
25
- spec.add_development_dependency 'rspec', '~> 3.1'
26
- spec.add_development_dependency 'rspec-given', '~> 3.8'
27
- spec.add_development_dependency 'pry'
28
- spec.add_development_dependency 'simplecov'
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec", "~> 3.9"
25
+ spec.add_development_dependency "rspec-given", "~> 3.8"
26
+ spec.add_development_dependency "pry"
27
+ spec.add_development_dependency "standard", "~> 1.1"
28
+ spec.add_development_dependency "codeclimate-test-reporter"
29
29
  end
metadata CHANGED
@@ -1,57 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shifty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Helbling
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-01 00:00:00.000000000 Z
11
+ date: 2022-10-03 00:00:00.000000000 Z
12
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.16'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.16'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
- - - "~>"
17
+ - - ">="
32
18
  - !ruby/object:Gem::Version
33
- version: '10.0'
19
+ version: '0'
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - "~>"
24
+ - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: '10.0'
26
+ version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rspec
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '3.1'
33
+ version: '3.9'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '3.1'
40
+ version: '3.9'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rspec-given
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +67,21 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: simplecov
70
+ name: standard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: codeclimate-test-reporter
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -103,13 +103,18 @@ executables: []
103
103
  extensions: []
104
104
  extra_rdoc_files: []
105
105
  files:
106
+ - ".github/dependabot.yml"
107
+ - ".github/workflows/codeql-analysis.yml"
108
+ - ".github/workflows/ruby.yml"
106
109
  - ".gitignore"
107
110
  - ".rspec"
108
- - ".travis.yml"
111
+ - ".standard.yml"
109
112
  - Gemfile
113
+ - Guardfile
110
114
  - LICENSE.txt
111
115
  - README.md
112
116
  - Rakefile
117
+ - _config.yml
113
118
  - bin/console
114
119
  - bin/setup
115
120
  - docs/shifty/worker.md
@@ -117,6 +122,7 @@ files:
117
122
  - lib/shifty/dsl.rb
118
123
  - lib/shifty/gang.rb
119
124
  - lib/shifty/roster.rb
125
+ - lib/shifty/taggable.rb
120
126
  - lib/shifty/version.rb
121
127
  - lib/shifty/worker.rb
122
128
  - pkg/.gitkeep
@@ -125,7 +131,7 @@ homepage: https://github.com/joelhelbling/shifty
125
131
  licenses:
126
132
  - MIT
127
133
  metadata: {}
128
- post_install_message:
134
+ post_install_message:
129
135
  rdoc_options: []
130
136
  require_paths:
131
137
  - lib
@@ -140,9 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
146
  - !ruby/object:Gem::Version
141
147
  version: '0'
142
148
  requirements: []
143
- rubyforge_project:
144
- rubygems_version: 2.7.3
145
- signing_key:
149
+ rubygems_version: 3.3.3
150
+ signing_key:
146
151
  specification_version: 4
147
152
  summary: A functional framework aimed at extremely low coupling
148
153
  test_files: []
data/.travis.yml DELETED
@@ -1,17 +0,0 @@
1
- env:
2
- global:
3
- - CC_TEST_REPORTER_ID=de10d77685b449162f3f3d568e1ab75d94c0f281afceee218502cf0995e49aa6
4
- sudo: false
5
- language: ruby
6
- rvm:
7
- - 2.5.0
8
- - jruby-19mode
9
- before_install: gem install bundler -v 1.16.1
10
- before_script:
11
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
12
- - chmod +x ./cc-test-reporter
13
- - ./cc-test-reporter before-build
14
- script:
15
- - bundle exec rspec
16
- after_script:
17
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT