worker_plugins 0.0.2 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 52655eb17a18d0572ef81a2f987d7292064c4e76
4
- data.tar.gz: dced538dc719887acdb52872cd03fac55980ec9f
2
+ SHA256:
3
+ metadata.gz: 8010aee14c8aa6b008bd0ab626f52a3e9da9c14c560d04f0c757f13781d4cbca
4
+ data.tar.gz: 3aba5e574d71e6671c0d45b68fea71a50b1d8c31ec13e166679f74eee0c09c9f
5
5
  SHA512:
6
- metadata.gz: a52d62435a2b7e04b756c8c570d2b903686d6ce311942264c4b0995ebde3d53c20b33e312e975200582646023182c95beb853a3a89c9e2515ff2e6d4ad50a043
7
- data.tar.gz: e6e897b847cc6d5968dc8cbe9c67228a2853aadcf75cfa5e5262f7e6468d0aa17178016bf5c3445a1604480c9059aafce78e13ef8d354c918173e4b21051b1b2
6
+ metadata.gz: 44dfebac2c28da2dba9e4f8cf746088daa85b33729f46e00e5548ac252d09425904b182eef34980fe72e9b6b3c0289ba0d71dd4c7b2170f2bbc7924ef4ce26be
7
+ data.tar.gz: affd58ce192d134c0c4918f114d5a2423b0aadde3e21be1ccbda039b96162e88f2ab54cb779914692ddbe54a18e060a144e19179efe45e4b8d342b26f9d7e597
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,8 @@
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 :resource_id, uniqueness: {scope: [:resource_type, :workplace_id]}
6
8
  end
@@ -0,0 +1,99 @@
1
+ class WorkerPlugins::AddQuery < 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
+ #{quote_table(resources_to_add.klass.table_name)}.#{quote_column(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,33 @@
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 quote_column(value)
19
+ WorkerPlugins::Workplace.connection.quote_column_name(value)
20
+ end
21
+
22
+ def quote_table(value)
23
+ WorkerPlugins::Workplace.connection.quote_table_name(value)
24
+ end
25
+
26
+ def postgres?
27
+ ActiveRecord::Base.connection.instance_values["config"][:adapter].downcase.include?("postgres")
28
+ end
29
+
30
+ def sqlite?
31
+ ActiveRecord::Base.connection.instance_values["config"][:adapter].downcase.include?("sqlite")
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ class WorkerPlugins::QueryLinksStatus < WorkerPlugins::ApplicationService
2
+ arguments :query, :workplace
3
+
4
+ def perform
5
+ checked_count = workplace
6
+ .workplace_links
7
+ .where(resource_id: query.distinct.select(query.klass.primary_key))
8
+ .count
9
+
10
+ query_count = query.count
11
+
12
+ succeed!(
13
+ all_checked: query_count == checked_count,
14
+ checked_count: checked_count,
15
+ query_count: query_count,
16
+ some_checked: checked_count.positive? && checked_count < query_count
17
+ )
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ class WorkerPlugins::RemoveQuery < WorkerPlugins::ApplicationService
2
+ arguments :query, :workplace
3
+
4
+ attr_reader :destroyed
5
+
6
+ def perform
7
+ remove_query_from_workplace
8
+ succeed!(destroyed: destroyed, mode: :destroyed)
9
+ end
10
+
11
+ def remove_query_from_workplace
12
+ links_query = workplace.workplace_links.where(resource_type: model_class.name, resource_id: query_with_selected_ids)
13
+ @destroyed = links_query.pluck(:resource_id)
14
+ links_query.delete_all
15
+ end
16
+
17
+ def model_class
18
+ query.klass
19
+ end
20
+
21
+ def query_with_selected_ids
22
+ WorkerPlugins::SelectColumnWithTypeCast.execute!(
23
+ column_name_to_select: :id,
24
+ column_to_compare_with: WorkerPlugins::WorkplaceLink.column_for_attribute(:resource_id),
25
+ query: query.except(:order)
26
+ )
27
+ end
28
+ end
@@ -0,0 +1,37 @@
1
+ class WorkerPlugins::SelectColumnWithTypeCast < WorkerPlugins::ApplicationService
2
+ arguments :column_name_to_select, :column_to_compare_with, :query
3
+
4
+ def perform
5
+ return succeed! query.select(column_name_to_select) if same_type?
6
+
7
+ if column_to_compare_with.type == :string
8
+ succeed! query_with_varchar
9
+ elsif column_to_compare_with.type == :integer
10
+ succeed! query_with_integer
11
+ else
12
+ raise "Cant handle type cast between types: " \
13
+ "#{model_class.table_name}.#{column_name_to_select} (#{column_to_select.type}) " \
14
+ "#{column_to_compare_with.name} (#{column_to_compare_with.type})"
15
+ end
16
+ end
17
+
18
+ def column_to_select
19
+ @column_to_select ||= model_class.column_for_attribute(column_name_to_select)
20
+ end
21
+
22
+ def model_class
23
+ @model_class ||= query.klass
24
+ end
25
+
26
+ def query_with_integer
27
+ query.select("CAST(#{model_class.table_name}.#{column_name_to_select} AS BIGINT)")
28
+ end
29
+
30
+ def query_with_varchar
31
+ query.select("CAST(#{model_class.table_name}.#{column_name_to_select} AS VARCHAR)")
32
+ end
33
+
34
+ def same_type?
35
+ column_to_select.type == column_to_compare_with.type
36
+ end
37
+ end
@@ -0,0 +1,49 @@
1
+ class WorkerPlugins::SwitchQuery < WorkerPlugins::ApplicationService
2
+ arguments :query, :workplace
3
+
4
+ def perform
5
+ if resources_to_add.count.zero?
6
+ result = WorkerPlugins::RemoveQuery.execute!(query: query, workplace: workplace)
7
+ succeed!(
8
+ destroyed: result.fetch(:destroyed),
9
+ mode: :destroyed
10
+ )
11
+ else
12
+ result = WorkerPlugins::AddQuery.execute!(query: query, workplace: workplace)
13
+ succeed!(
14
+ created: result.fetch(:created),
15
+ mode: :created
16
+ )
17
+ end
18
+ end
19
+
20
+ def ids_added_already_query
21
+ workplace
22
+ .workplace_links
23
+ .where(resource_type: model_class.name, resource_id: query_with_selected_ids)
24
+ end
25
+
26
+ def ids_added_already
27
+ WorkerPlugins::SelectColumnWithTypeCast.execute!(
28
+ column_name_to_select: :resource_id,
29
+ column_to_compare_with: model_class.column_for_attribute(:id),
30
+ query: ids_added_already_query
31
+ )
32
+ end
33
+
34
+ def model_class
35
+ @model_class ||= query.klass
36
+ end
37
+
38
+ def query_with_selected_ids
39
+ WorkerPlugins::SelectColumnWithTypeCast.execute!(
40
+ column_name_to_select: :id,
41
+ column_to_compare_with: WorkerPlugins::WorkplaceLink.column_for_attribute(:resource_id),
42
+ query: query
43
+ )
44
+ end
45
+
46
+ def resources_to_add
47
+ @resources_to_add ||= query.where.not(id: ids_added_already)
48
+ end
49
+ end
data/config/routes.rb CHANGED
@@ -1,2 +1,2 @@
1
- Rails.application.routes.draw do
1
+ Rails.application.routes.draw do # rubocop:disable Lint/EmptyBlock
2
2
  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,9 @@
1
+ class ChangeWorkplaceLinksResourceIdToStringToSupportUuids < ActiveRecord::Migration[7.0]
2
+ def up
3
+ change_column :worker_plugins_workplace_links, :resource_id, :string
4
+ end
5
+
6
+ def down
7
+ change_column :worker_plugins_workplace_links, :resource_id, :bigint
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class ChangeResourceIdToStringToSupportUuid < ActiveRecord::Migration[6.1]
2
+ def up
3
+ change_column :worker_plugins_workplace_links, :resource_id, :string
4
+ end
5
+
6
+ def down
7
+ change_column :worker_plugins_workplace_links, :resource_id, :bigint
8
+ end
9
+ 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.5".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,103 +1,19 @@
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.5
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
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rails
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 3.2.21
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 3.2.21
27
- - !ruby/object:Gem::Dependency
28
- name: active-record-transactioner
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: sqlite3
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec-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: factory_girl_rails
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: awesome_translations
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
11
+ date: 2023-05-09 00:00:00.000000000 Z
12
+ dependencies: []
97
13
  description: Rails framework for easily choosing and creating lists of objects and
98
14
  execute plugins against them.
99
15
  email:
100
- - k@spernj.org
16
+ - kaspernj@gmail.com
101
17
  executables: []
102
18
  extensions: []
103
19
  extra_rdoc_files: []
@@ -107,6 +23,12 @@ files:
107
23
  - Rakefile
108
24
  - app/models/worker_plugins/workplace.rb
109
25
  - app/models/worker_plugins/workplace_link.rb
26
+ - app/services/worker_plugins/add_query.rb
27
+ - app/services/worker_plugins/application_service.rb
28
+ - app/services/worker_plugins/query_links_status.rb
29
+ - app/services/worker_plugins/remove_query.rb
30
+ - app/services/worker_plugins/select_column_with_type_cast.rb
31
+ - app/services/worker_plugins/switch_query.rb
110
32
  - config/locales/awesome_translations/models/worker_plugins__workplace/da.yml
111
33
  - config/locales/awesome_translations/models/worker_plugins__workplace/en.yml
112
34
  - config/locales/awesome_translations/models/worker_plugins__workplace_link/da.yml
@@ -114,13 +36,16 @@ files:
114
36
  - config/routes.rb
115
37
  - db/migrate/20150521114555_create_worker_plugins_workplaces.rb
116
38
  - db/migrate/20150521114659_create_worker_plugins_workplace_links.rb
39
+ - db/migrate/20200702072306_change_workplace_links_resource_id_to_string_to_support_uuids.rb
40
+ - db/migrate/20210106190349_change_resource_id_to_string_to_support_uuid.rb
117
41
  - lib/tasks/worker_plugins_tasks.rake
118
42
  - lib/worker_plugins.rb
119
43
  - lib/worker_plugins/engine.rb
120
44
  - lib/worker_plugins/version.rb
121
45
  homepage: https://www.github.com/kaspernj/worker_plugins
122
46
  licenses: []
123
- metadata: {}
47
+ metadata:
48
+ rubygems_mfa_required: 'true'
124
49
  post_install_message:
125
50
  rdoc_options: []
126
51
  require_paths:
@@ -129,15 +54,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
54
  requirements:
130
55
  - - ">="
131
56
  - !ruby/object:Gem::Version
132
- version: '0'
57
+ version: 2.7.5
133
58
  required_rubygems_version: !ruby/object:Gem::Requirement
134
59
  requirements:
135
60
  - - ">="
136
61
  - !ruby/object:Gem::Version
137
62
  version: '0'
138
63
  requirements: []
139
- rubyforge_project:
140
- rubygems_version: 2.4.0
64
+ rubygems_version: 3.1.6
141
65
  signing_key:
142
66
  specification_version: 4
143
67
  summary: Rails framework for easily choosing and creating lists of objects and execute