worker_plugins 0.0.2 → 0.0.4

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: 52655eb17a18d0572ef81a2f987d7292064c4e76
4
- data.tar.gz: dced538dc719887acdb52872cd03fac55980ec9f
2
+ SHA256:
3
+ metadata.gz: 0200fe1c8fd8d1618539ea3306191456ec929cd8f6e70ae2fb707f9ba79d314f
4
+ data.tar.gz: 1d78c88a6aabfa667bf9d7f8533a52dfb12c3edfe9908c45da97fc85e4234d79
5
5
  SHA512:
6
- metadata.gz: a52d62435a2b7e04b756c8c570d2b903686d6ce311942264c4b0995ebde3d53c20b33e312e975200582646023182c95beb853a3a89c9e2515ff2e6d4ad50a043
7
- data.tar.gz: e6e897b847cc6d5968dc8cbe9c67228a2853aadcf75cfa5e5262f7e6468d0aa17178016bf5c3445a1604480c9059aafce78e13ef8d354c918173e4b21051b1b2
6
+ metadata.gz: c9b8c48f468ddd91c47b784472a87f860e98982ec7aba4674cf701395ce8ea27434e1c2de115d3f6033268930a6ed30c4d8a69953b82707b5b66d0780ae2fbdf
7
+ data.tar.gz: c1d0d739c588beacb9aa44c44ff627f7ad838546d39ccceef936022babf539d7fe57819294ae2becaa416da26f0cef47651901667e02964b8e470c4c6df9111c
data/README.md CHANGED
@@ -7,6 +7,11 @@ Add to your Gemfile and bundle:
7
7
  gem 'worker_plugins'
8
8
  ```
9
9
 
10
+ Install migrations (only necessary sometimes - try running `rails db:migrate` first before installing migrations):
11
+ ```bash
12
+ rails worker_plugins:install:migrations
13
+ ```
14
+
10
15
  ## Usage
11
16
 
12
17
  Add a lot of objects to a workspace through transactions:
@@ -24,4 +29,4 @@ workspace.each_resource(types: ['User']) do |user|
24
29
 
25
30
  ## License
26
31
 
27
- This project rocks and uses MIT-LICENSE.
32
+ This project rocks and uses MIT-LICENSE.
data/Rakefile CHANGED
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env rake
2
2
  begin
3
- require 'bundler/setup'
3
+ require "bundler/setup"
4
4
  rescue LoadError
5
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
6
6
  end
7
7
  begin
8
- require 'rdoc/task'
8
+ require "rdoc/task"
9
9
  rescue LoadError
10
- require 'rdoc/rdoc'
11
- require 'rake/rdoctask'
10
+ require "rdoc/rdoc"
11
+ require "rake/rdoctask"
12
12
  RDoc::Task = Rake::RDocTask
13
13
  end
14
14
 
15
15
  RDoc::Task.new(:rdoc) do |rdoc|
16
- rdoc.rdoc_dir = 'rdoc'
17
- rdoc.title = 'WorkerPlugins'
18
- rdoc.options << '--line-numbers'
19
- rdoc.rdoc_files.include('README.rdoc')
20
- rdoc.rdoc_files.include('lib/**/*.rb')
16
+ rdoc.rdoc_dir = "rdoc"
17
+ rdoc.title = "WorkerPlugins"
18
+ rdoc.options << "--line-numbers"
19
+ rdoc.rdoc_files.include("README.rdoc")
20
+ rdoc.rdoc_files.include("lib/**/*.rb")
21
21
  end
22
22
 
23
- APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
- load 'rails/tasks/engine.rake'
23
+ APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
24
+ load "rails/tasks/engine.rake"
25
25
 
26
26
  Bundler::GemHelper.install_tasks
@@ -1,58 +1,28 @@
1
- class WorkerPlugins::Workplace < ActiveRecord::Base
1
+ class WorkerPlugins::Workplace < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
2
+ self.table_name = "worker_plugins_workplaces"
3
+
2
4
  has_many :workplace_links, dependent: :destroy
3
5
 
4
6
  belongs_to :user, polymorphic: true
5
7
 
6
- validates_presence_of :name
7
-
8
- def add_links_to_objects(objects)
9
- require 'active-record-transactioner'
10
-
11
- # Cache inserted objects.
12
- inserted_ids = load_inserted_ids
13
-
14
- # Add given objects through transactions.
15
- ActiveRecordTransactioner.new do |trans|
16
- stream_each(objects) do |object|
17
- class_name = object.class.name.to_s
18
- inserted_ids[class_name] ||= {}
19
-
20
- unless inserted_ids[class_name].key?(object.id)
21
- inserted_ids[class_name][object.id] = true
22
- link = WorkerPlugins::WorkplaceLink.new(
23
- workplace: self,
24
- resource: object
25
- )
26
- trans.save!(link)
27
- end
28
- end
29
- end
8
+ validates :name, presence: true
30
9
 
31
- return
32
- end
33
-
34
- def each_resource(args = {})
10
+ def each_resource(limit: nil, types: nil)
35
11
  count = 0
36
12
 
37
- links_query = workplace_links.group('worker_plugins_workplace_links.resource_type').order('worker_plugins_workplace_links.id')
38
- links_query = links_query.where(resource_type: args[:types]) if args[:types]
39
-
40
- links_query.each do |workplace_link|
41
- constant = Object.const_get(workplace_link.resource_type)
42
- ids = workplace_links.select(:resource_id).where(resource_type: workplace_link.resource_type).map(&:resource_id)
43
-
44
- ids.each_slice(500) do |ids_slice|
45
- constant.where(id: ids_slice).each do |resource|
46
- yield resource
47
- count += 1
48
- return if args[:limit] && count >= args[:limit]
49
- end
13
+ links_query = workplace_links.order(:id)
14
+ links_query = links_query.where(resource_type: types) if types
15
+ links_query.find_in_batches do |workplace_links|
16
+ workplace_links.each do |workplace_link|
17
+ yield workplace_link.resource
18
+ count += 1
19
+ return if limit && count >= limit # rubocop:disable Lint/NonLocalExitFromIterator:
50
20
  end
51
21
  end
52
22
  end
53
23
 
54
24
  def each_query_for_resources
55
- workplace_links.group('worker_plugins_workplace_links.resource_type').order('worker_plugins_workplace_links.id').each do |workplace_link|
25
+ workplace_links.group("worker_plugins_workplace_links.resource_type").order("worker_plugins_workplace_links.id").each do |workplace_link|
56
26
  resource_type = workplace_link.resource_type
57
27
  constant = Object.const_get(resource_type)
58
28
  ids = workplace_links.select(:resource_id).where(resource_type: workplace_link.resource_type).map(&:resource_id)
@@ -82,11 +52,11 @@ private
82
52
  def load_inserted_ids
83
53
  inserted_ids = {}
84
54
 
85
- workplace_links.select(worker_plugins_workplace_links: [:resource_type, :resource_id]).find_each do |workplace_link|
55
+ workplace_links.select(:id, :resource_type, :resource_id).find_each do |workplace_link|
86
56
  inserted_ids[workplace_link.resource_type] ||= {}
87
57
  inserted_ids[workplace_link.resource_type][workplace_link.resource_id] = true
88
58
  end
89
59
 
90
- return inserted_ids
60
+ inserted_ids
91
61
  end
92
62
  end
@@ -1,6 +1,9 @@
1
- class WorkerPlugins::WorkplaceLink < ActiveRecord::Base
1
+ class WorkerPlugins::WorkplaceLink < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
2
+ self.table_name = "worker_plugins_workplace_links"
3
+
2
4
  belongs_to :workplace
3
5
  belongs_to :resource, polymorphic: true
4
6
 
5
- validates_presence_of :workplace, :resource
7
+ validates :workplace, :resource, presence: true
8
+ validates :resource_id, uniqueness: {scope: [:resource_type, :workplace_id]}
6
9
  end
@@ -0,0 +1,99 @@
1
+ class WorkerPlugins::AddCollection < WorkerPlugins::ApplicationService
2
+ attr_reader :query, :workplace
3
+
4
+ def initialize(query:, workplace:)
5
+ @query = query
6
+ .except(:order) # This fixes crashes in Postgres
7
+ @workplace = workplace
8
+ end
9
+
10
+ def perform
11
+ created # Cache which are about to be created
12
+ add_query_to_workplace
13
+ succeed!(created: created)
14
+ end
15
+
16
+ def add_query_to_workplace
17
+ WorkerPlugins::WorkplaceLink.connection.execute(sql)
18
+ end
19
+
20
+ def created
21
+ @created ||= resources_to_add.pluck(primary_key.to_sym)
22
+ end
23
+
24
+ def ids_added_already_query
25
+ workplace
26
+ .workplace_links
27
+ .where(resource_type: model_class.name, resource_id: query_with_selected_ids)
28
+ end
29
+
30
+ def ids_added_already
31
+ WorkerPlugins::SelectColumnWithTypeCast.execute!(
32
+ column_name_to_select: :resource_id,
33
+ column_to_compare_with: model_class.column_for_attribute(:id),
34
+ query: ids_added_already_query
35
+ )
36
+ end
37
+
38
+ def model_class
39
+ @model_class ||= query.klass
40
+ end
41
+
42
+ def primary_key
43
+ @primary_key ||= resources_to_add.klass.primary_key
44
+ end
45
+
46
+ def query_with_selected_ids
47
+ WorkerPlugins::SelectColumnWithTypeCast.execute!(
48
+ column_name_to_select: :id,
49
+ column_to_compare_with: WorkerPlugins::WorkplaceLink.column_for_attribute(:resource_id),
50
+ query: query
51
+ )
52
+ end
53
+
54
+ def resources_to_add
55
+ @resources_to_add ||= query
56
+ .distinct
57
+ .where
58
+ .not(id: ids_added_already)
59
+ end
60
+
61
+ def select_sql
62
+ @select_sql ||= resources_to_add
63
+ .select("
64
+ #{db_now_value},
65
+ #{quote(resources_to_add.klass.name)},
66
+ \"#{resources_to_add.klass.table_name}\".\"#{primary_key}\",
67
+ #{db_now_value},
68
+ #{select_workplace_id_sql}
69
+ ")
70
+ .to_sql
71
+ end
72
+
73
+ def select_workplace_id_sql
74
+ workplace_id_column = WorkerPlugins::WorkplaceLink.columns.find { |column| column.name == "workplace_id" }
75
+
76
+ if workplace_id_column.type == :uuid
77
+ "CAST(#{quote(workplace.id)} AS UUID)"
78
+ else
79
+ quote(workplace.id)
80
+ end
81
+ end
82
+
83
+ def sql
84
+ @sql ||= "
85
+ INSERT INTO
86
+ worker_plugins_workplace_links
87
+
88
+ (
89
+ created_at,
90
+ resource_type,
91
+ resource_id,
92
+ updated_at,
93
+ workplace_id
94
+ )
95
+
96
+ #{select_sql}
97
+ "
98
+ end
99
+ end
@@ -0,0 +1,25 @@
1
+ class WorkerPlugins::ApplicationService < ServicePattern::Service
2
+ def db_now_value
3
+ @db_now_value ||= begin
4
+ time_string = Time.zone.now.strftime("%Y-%m-%d %H:%M:%S")
5
+
6
+ if postgres?
7
+ "CAST(#{quote(time_string)} AS TIMESTAMP)"
8
+ else
9
+ quote(time_string)
10
+ end
11
+ end
12
+ end
13
+
14
+ def quote(value)
15
+ WorkerPlugins::Workplace.connection.quote(value)
16
+ end
17
+
18
+ def postgres?
19
+ ActiveRecord::Base.connection.instance_values["config"][:adapter].downcase.include?("postgres")
20
+ end
21
+
22
+ def sqlite?
23
+ ActiveRecord::Base.connection.instance_values["config"][:adapter].downcase.include?("sqlite")
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ class WorkerPlugins::RemoveCollection < WorkerPlugins::ApplicationService
2
+ attr_reader :destroyed, :query, :workplace
3
+
4
+ def initialize(query:, workplace:)
5
+ @query = query
6
+ @workplace = workplace
7
+ end
8
+
9
+ def perform
10
+ remove_query_from_workplace
11
+ succeed!(destroyed: destroyed, mode: :destroyed)
12
+ end
13
+
14
+ def remove_query_from_workplace
15
+ links_query = workplace.workplace_links.where(resource_type: model_class.name, resource_id: query_with_selected_ids)
16
+ @destroyed = links_query.pluck(:resource_id)
17
+ links_query.delete_all
18
+ end
19
+
20
+ def model_class
21
+ query.klass
22
+ end
23
+
24
+ def query_with_selected_ids
25
+ WorkerPlugins::SelectColumnWithTypeCast.execute!(
26
+ column_name_to_select: :id,
27
+ column_to_compare_with: WorkerPlugins::WorkplaceLink.column_for_attribute(:resource_id),
28
+ query: query
29
+ )
30
+ end
31
+ end
@@ -0,0 +1,43 @@
1
+ class WorkerPlugins::SelectColumnWithTypeCast < WorkerPlugins::ApplicationService
2
+ attr_reader :column_name_to_select, :column_to_compare_with, :query
3
+
4
+ def initialize(column_name_to_select:, column_to_compare_with:, query:)
5
+ @column_name_to_select = column_name_to_select
6
+ @column_to_compare_with = column_to_compare_with
7
+ @query = query
8
+ end
9
+
10
+ def perform
11
+ return succeed! query.select(column_name_to_select) if same_type?
12
+
13
+ if column_to_compare_with.type == :string
14
+ succeed! query_with_varchar
15
+ elsif column_to_compare_with.type == :integer
16
+ succeed! query_with_integer
17
+ else
18
+ raise "Cant handle type cast between types: " \
19
+ "#{model_class.table_name}.#{column_name_to_select} (#{column_to_select.type}) " \
20
+ "#{column_to_compare_with.name} (#{column_to_compare_with.type})"
21
+ end
22
+ end
23
+
24
+ def column_to_select
25
+ @column_to_select ||= model_class.column_for_attribute(column_name_to_select)
26
+ end
27
+
28
+ def model_class
29
+ @model_class ||= query.klass
30
+ end
31
+
32
+ def query_with_integer
33
+ query.select("CAST(#{model_class.table_name}.#{column_name_to_select} AS BIGINT)")
34
+ end
35
+
36
+ def query_with_varchar
37
+ query.select("CAST(#{model_class.table_name}.#{column_name_to_select} AS VARCHAR)")
38
+ end
39
+
40
+ def same_type?
41
+ column_to_select.type == column_to_compare_with.type
42
+ end
43
+ end
@@ -0,0 +1,54 @@
1
+ class WorkerPlugins::SwitchCollection < WorkerPlugins::ApplicationService
2
+ attr_reader :query, :workplace
3
+
4
+ def initialize(query:, workplace:)
5
+ @query = query
6
+ @workplace = workplace
7
+ end
8
+
9
+ def perform
10
+ if resources_to_add.count.zero?
11
+ result = WorkerPlugins::RemoveCollection.execute!(query: query, workplace: workplace)
12
+ succeed!(
13
+ destroyed: result.fetch(:destroyed),
14
+ mode: :destroyed
15
+ )
16
+ else
17
+ result = WorkerPlugins::AddCollection.execute!(query: query, workplace: workplace)
18
+ succeed!(
19
+ created: result.fetch(:created),
20
+ mode: :created
21
+ )
22
+ end
23
+ end
24
+
25
+ def ids_added_already_query
26
+ workplace
27
+ .workplace_links
28
+ .where(resource_type: model_class.name, resource_id: query_with_selected_ids)
29
+ end
30
+
31
+ def ids_added_already
32
+ WorkerPlugins::SelectColumnWithTypeCast.execute!(
33
+ column_name_to_select: :resource_id,
34
+ column_to_compare_with: model_class.column_for_attribute(:id),
35
+ query: ids_added_already_query
36
+ )
37
+ end
38
+
39
+ def model_class
40
+ @model_class ||= query.klass
41
+ end
42
+
43
+ def query_with_selected_ids
44
+ WorkerPlugins::SelectColumnWithTypeCast.execute!(
45
+ column_name_to_select: :id,
46
+ column_to_compare_with: WorkerPlugins::WorkplaceLink.column_for_attribute(:resource_id),
47
+ query: query
48
+ )
49
+ end
50
+
51
+ def resources_to_add
52
+ @resources_to_add ||= query.where.not(id: ids_added_already)
53
+ end
54
+ end
@@ -1,13 +1,10 @@
1
- class CreateWorkerPluginsWorkplaces < ActiveRecord::Migration
1
+ class CreateWorkerPluginsWorkplaces < ActiveRecord::Migration[5.2]
2
2
  def change
3
3
  create_table :worker_plugins_workplaces do |t|
4
- t.string :name
5
- t.boolean :active
6
- t.belongs_to :user, polymorphic: true
4
+ t.string :name, null: false
5
+ t.boolean :active, default: false, index: true, null: false
6
+ t.belongs_to :user, index: true, polymorphic: true
7
7
  t.timestamps
8
8
  end
9
-
10
- add_index :worker_plugins_workplaces, :user_id
11
- add_index :worker_plugins_workplaces, :active
12
9
  end
13
10
  end
@@ -1,13 +1,23 @@
1
- class CreateWorkerPluginsWorkplaceLinks < ActiveRecord::Migration
1
+ class CreateWorkerPluginsWorkplaceLinks < ActiveRecord::Migration[5.2]
2
2
  def change
3
3
  create_table :worker_plugins_workplace_links do |t|
4
- t.belongs_to :workplace
5
- t.belongs_to :resource, polymorphic: true
6
- t.text :custom_data
4
+ t.references :workplace, index: {name: "index_on_workplace_id"}, null: false
5
+ t.belongs_to :resource, index: {name: "index_on_resource"}, null: false, polymorphic: true
6
+
7
+ if postgres?
8
+ t.jsonb :custom_data
9
+ else
10
+ t.json :custom_data
11
+ end
12
+
7
13
  t.timestamps
8
14
  end
9
15
 
10
- add_index :worker_plugins_workplace_links, :workplace_id
11
- add_index :worker_plugins_workplace_links, [:workplace_id, :resource_type, :resource_id], unique: true, name: 'unique_resource_on_workspace'
16
+ add_index :worker_plugins_workplace_links, [:workplace_id, :resource_type, :resource_id], unique: true, name: "unique_resource_on_workspace"
17
+ add_foreign_key :worker_plugins_workplace_links, :worker_plugins_workplaces, column: "workplace_id"
18
+ end
19
+
20
+ def postgres?
21
+ connection.adapter_name.downcase.include?("postgres")
12
22
  end
13
23
  end
@@ -0,0 +1,5 @@
1
+ class ChangeWorkplaceLinksResourceIdToStringToSupportUuids < ActiveRecord::Migration[6.0]
2
+ def change
3
+ change_column :worker_plugins_workplace_links, :resource_id, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class ChangeResourceIdToStringToSupportUuid < ActiveRecord::Migration[6.1]
2
+ def change
3
+ change_column :worker_plugins_workplace_links, :resource_id, :string
4
+ end
5
+ end
@@ -1,15 +1,9 @@
1
- module WorkerPlugins
2
- class Engine < ::Rails::Engine
3
- isolate_namespace WorkerPlugins
1
+ module WorkerPlugins; end
4
2
 
5
- # Add translations to load path.
6
- path = File.realpath(File.join(File.dirname(__FILE__), '..', '..', 'config', 'locales'))
7
- I18n.load_path += Dir[File.join(path, '**', '*.{rb,yml}')]
3
+ class WorkerPlugins::Engine < ::Rails::Engine
4
+ isolate_namespace WorkerPlugins
8
5
 
9
- initializer :append_migrations do |app|
10
- unless app.root.to_s.match root.to_s
11
- app.config.paths['db/migrate'] += config.paths['db/migrate'].expanded
12
- end
13
- end
14
- end
6
+ # Add translations to load path.
7
+ path = File.realpath(File.join(File.dirname(__FILE__), "..", "..", "config", "locales"))
8
+ I18n.load_path += Dir[File.join(path, "**", "*.{rb,yml}")]
15
9
  end
@@ -1,3 +1,3 @@
1
1
  module WorkerPlugins
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.4".freeze
3
3
  end
@@ -1,4 +1,5 @@
1
- require 'worker_plugins/engine'
1
+ require "worker_plugins/engine"
2
+ require "service_pattern"
2
3
 
3
4
  module WorkerPlugins
4
5
  end
metadata CHANGED
@@ -1,45 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worker_plugins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kasper Johanmsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-24 00:00:00.000000000 Z
11
+ date: 2021-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.21
19
+ version: 5.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 3.2.21
26
+ version: 5.0.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: active-record-transactioner
28
+ name: service_pattern
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 1.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: awesome_translations
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: sqlite3
56
+ name: factory_bot_rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-rails
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - ">="
@@ -67,7 +95,7 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: factory_girl_rails
98
+ name: rubocop
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - ">="
@@ -81,7 +109,49 @@ dependencies:
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
- name: awesome_translations
112
+ name: rubocop-performance
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: sqlite3
85
155
  requirement: !ruby/object:Gem::Requirement
86
156
  requirements:
87
157
  - - ">="
@@ -97,7 +167,7 @@ dependencies:
97
167
  description: Rails framework for easily choosing and creating lists of objects and
98
168
  execute plugins against them.
99
169
  email:
100
- - k@spernj.org
170
+ - kaspernj@gmail.com
101
171
  executables: []
102
172
  extensions: []
103
173
  extra_rdoc_files: []
@@ -107,6 +177,11 @@ files:
107
177
  - Rakefile
108
178
  - app/models/worker_plugins/workplace.rb
109
179
  - app/models/worker_plugins/workplace_link.rb
180
+ - app/services/worker_plugins/add_collection.rb
181
+ - app/services/worker_plugins/application_service.rb
182
+ - app/services/worker_plugins/remove_collection.rb
183
+ - app/services/worker_plugins/select_column_with_type_cast.rb
184
+ - app/services/worker_plugins/switch_collection.rb
110
185
  - config/locales/awesome_translations/models/worker_plugins__workplace/da.yml
111
186
  - config/locales/awesome_translations/models/worker_plugins__workplace/en.yml
112
187
  - config/locales/awesome_translations/models/worker_plugins__workplace_link/da.yml
@@ -114,6 +189,8 @@ files:
114
189
  - config/routes.rb
115
190
  - db/migrate/20150521114555_create_worker_plugins_workplaces.rb
116
191
  - db/migrate/20150521114659_create_worker_plugins_workplace_links.rb
192
+ - db/migrate/20200702072306_change_workplace_links_resource_id_to_string_to_support_uuids.rb
193
+ - db/migrate/20210106190349_change_resource_id_to_string_to_support_uuid.rb
117
194
  - lib/tasks/worker_plugins_tasks.rake
118
195
  - lib/worker_plugins.rb
119
196
  - lib/worker_plugins/engine.rb
@@ -129,15 +206,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
206
  requirements:
130
207
  - - ">="
131
208
  - !ruby/object:Gem::Version
132
- version: '0'
209
+ version: 2.5.7
133
210
  required_rubygems_version: !ruby/object:Gem::Requirement
134
211
  requirements:
135
212
  - - ">="
136
213
  - !ruby/object:Gem::Version
137
214
  version: '0'
138
215
  requirements: []
139
- rubyforge_project:
140
- rubygems_version: 2.4.0
216
+ rubygems_version: 3.1.6
141
217
  signing_key:
142
218
  specification_version: 4
143
219
  summary: Rails framework for easily choosing and creating lists of objects and execute