perilune 0.1.0 → 0.1.2
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 +4 -4
- data/README.md +25 -0
- data/app/jobs/perilune/tasks/executor_job.rb +12 -1
- data/app/models/perilune/task.rb +10 -1
- data/app/operations/perilune/tasks/exports/create_operation.rb +1 -0
- data/app/operations/perilune/tasks/find_operation.rb +5 -1
- data/app/operations/perilune/tasks/imports/create_operation.rb +54 -0
- data/app/operations/perilune/tasks/search_by_tag_operation.rb +27 -0
- data/app/operations/perilune/tasks/search_operation.rb +3 -0
- data/app/serializers/perilune/tasks/serializer.rb +4 -0
- data/app/views/perilune/tasks/index.html.haml +1 -1
- data/app/views/perilune/tasks/show.html.haml +1 -1
- data/config/github_database.yml +11 -0
- data/lib/generators/perilune/install/install_generator.rb +26 -0
- data/lib/generators/perilune/install/templates/create_periline_tasks.rb +19 -0
- data/lib/perilune/configuration.rb +21 -0
- data/lib/perilune/tasks/mixin.rb +13 -0
- data/lib/perilune/version.rb +1 -1
- data/lib/perilune.rb +12 -1
- metadata +73 -11
- data/app/operations/perilune/tasks/create_operation.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2667aa181ff8f8d006a2bb84243f6d187cf1ce489f610e0a2f95cb2799556c84
|
4
|
+
data.tar.gz: f745164223c3bd6a7ce9bab71932f3ca8e0d4b014386f4eedb914bb1ee929df0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6dcf35402e3fafbd90f6a52f2cfc810889de1761e91b485fa3c0cefa5ea4a2416c9bf918f1a4778067d4e55c239b25f3516dd646741a209a27d38a8e7a41a0c9
|
7
|
+
data.tar.gz: 47181255a66a80ce2d4f8cdeddb72ee08dd15b5bb4a83a5aad6a7613e858bb791d5427acb9bb2cdff33168e45e9eb2abc8ce85f7e07aaa5fecbfaebf10382aa8
|
data/README.md
CHANGED
@@ -21,6 +21,31 @@ Or install it yourself as:
|
|
21
21
|
$ gem install perilune
|
22
22
|
```
|
23
23
|
|
24
|
+
## Configuration
|
25
|
+
You can use diffrent queue name for cron job:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
# frozen_string_literal: true
|
29
|
+
|
30
|
+
Perilune.configure do |config|
|
31
|
+
config.queue_name = 'test'
|
32
|
+
end
|
33
|
+
|
34
|
+
```
|
35
|
+
|
36
|
+
> Note - Perilune is using *default* as queue name.
|
37
|
+
|
38
|
+
Perilune using Redis as defualt driver for Trifle Stats. You can configure the driver for Trifle::Stats:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
Perilune.configure do |config|
|
42
|
+
config.stat_driver = Trifle::Stats::Driver::Postgres.new(
|
43
|
+
ActiveRecord::Base.connection.instance_variable_get('@connection')
|
44
|
+
)
|
45
|
+
end
|
46
|
+
```
|
47
|
+
You can find more driver [here](https://trifle.io/docs/stats/drivers/)
|
48
|
+
|
24
49
|
## Contributing
|
25
50
|
Contribution directions go here.
|
26
51
|
|
@@ -3,13 +3,14 @@
|
|
3
3
|
module Perilune
|
4
4
|
module Tasks
|
5
5
|
class ExecutorJob < ApplicationJob
|
6
|
-
queue_as
|
6
|
+
queue_as Perilune.default.queue_name
|
7
7
|
|
8
8
|
class UndefinedTaskKlass < StandardError; end
|
9
9
|
|
10
10
|
def perform(task_id)
|
11
11
|
@task_id = task_id
|
12
12
|
executor.execute
|
13
|
+
track_stats(event: task.task_type, success: executor.success?)
|
13
14
|
executor.success? ? success : failure
|
14
15
|
end
|
15
16
|
|
@@ -32,6 +33,16 @@ module Perilune
|
|
32
33
|
|
33
34
|
@executor ||= task.task_klass.constantize.new(file: task.file.download, task: task)
|
34
35
|
end
|
36
|
+
|
37
|
+
def track_stats(event:, success:)
|
38
|
+
count_hash = success ? { count: 1, success: 1 } : { count: 1, failure: 1 }
|
39
|
+
inner_hash = { event.downcase.intern => count_hash }
|
40
|
+
Trifle::Stats.track(
|
41
|
+
key: "perilune::#{event.downcase}", at: Time.zone.now,
|
42
|
+
config: Perilune.default.stats_driver_config,
|
43
|
+
values: count_hash.merge(inner_hash)
|
44
|
+
)
|
45
|
+
end
|
35
46
|
end
|
36
47
|
end
|
37
48
|
end
|
data/app/models/perilune/task.rb
CHANGED
@@ -4,10 +4,13 @@ module Perilune
|
|
4
4
|
class Task < ApplicationRecord
|
5
5
|
self.table_name = 'perilune_tasks'
|
6
6
|
validates :state, inclusion: {
|
7
|
-
in: %w[draft
|
7
|
+
in: %w[draft started processing processed failed],
|
8
8
|
message: '%<value>s is not a valid state'
|
9
9
|
}
|
10
10
|
validates :task_klass, presence: true
|
11
|
+
|
12
|
+
before_save :update_state_timestamp, if: :state_change_to_be_saved
|
13
|
+
|
11
14
|
has_one_attached :file
|
12
15
|
|
13
16
|
def file_name
|
@@ -19,5 +22,11 @@ module Perilune
|
|
19
22
|
rescue StandardError
|
20
23
|
nil
|
21
24
|
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def update_state_timestamp
|
29
|
+
send("#{state}_at=", Time.now) if respond_to?("#{state}_at")
|
30
|
+
end
|
22
31
|
end
|
23
32
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Perilune
|
4
|
+
module Tasks
|
5
|
+
module Imports
|
6
|
+
class CreateOperation
|
7
|
+
include LedgerSync::Domains::Operation::Mixin
|
8
|
+
|
9
|
+
class Contract < LedgerSync::Ledgers::Contract
|
10
|
+
params do
|
11
|
+
required(:file).maybe(type?: File)
|
12
|
+
required(:file).maybe(type?: Tempfile)
|
13
|
+
required(:task_klass).filled(:string)
|
14
|
+
optional(:tags).filled(:array)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def operate
|
21
|
+
attach!
|
22
|
+
if task.save
|
23
|
+
Perilune::Tasks::ExecutorJob.perform_later(task.id)
|
24
|
+
success(true)
|
25
|
+
else
|
26
|
+
failure(task.errors.full_messages)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def task
|
31
|
+
@task ||= Perilune::Task.new(
|
32
|
+
state: 'draft',
|
33
|
+
task_klass: params[:task_klass],
|
34
|
+
task_type: 'Import',
|
35
|
+
tags: params[:tags]
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def attach!
|
40
|
+
task.file.attach(
|
41
|
+
io: params[:file],
|
42
|
+
key: "perilune/#{ActiveStorage::Blob.generate_unique_secure_token}",
|
43
|
+
filename: "#{params[:task_klass]}_#{Time.zone.now.to_i}"
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
# override to use common serializer for all domain
|
48
|
+
def serializer_for(*)
|
49
|
+
Perilune::Tasks::Serializer.new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Perilune
|
4
|
+
module Tasks
|
5
|
+
class SearchByTagOperation < Perilune::Tasks::SearchOperation
|
6
|
+
class Contract < LedgerSync::Ledgers::Contract
|
7
|
+
params do
|
8
|
+
required(:tag).value(:string)
|
9
|
+
required(:query).value(:hash)
|
10
|
+
required(:limit).value(:hash)
|
11
|
+
required(:includes).value(:array)
|
12
|
+
required(:order).value(:string)
|
13
|
+
required(:page).value(:integer)
|
14
|
+
required(:per).value(:integer)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def resources
|
19
|
+
@resources ||= super.where('? = ANY (tags)', params[:tag])
|
20
|
+
end
|
21
|
+
|
22
|
+
def serializer_for(*)
|
23
|
+
Perilune::Tasks::Serializer.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -5,6 +5,7 @@ module Perilune
|
|
5
5
|
class Serializer < LedgerSync::Domains::Serializer
|
6
6
|
attribute :id
|
7
7
|
attribute :task_klass
|
8
|
+
attribute :task_type
|
8
9
|
attribute :attrs
|
9
10
|
attribute :state
|
10
11
|
attribute :tags
|
@@ -13,6 +14,9 @@ module Perilune
|
|
13
14
|
attribute :updated_at
|
14
15
|
attribute :file_name
|
15
16
|
attribute :file_url
|
17
|
+
attribute :file_size do |attr|
|
18
|
+
attr[:resource].file.try(:byte_size)
|
19
|
+
end
|
16
20
|
end
|
17
21
|
end
|
18
22
|
end
|
@@ -21,7 +21,7 @@
|
|
21
21
|
.rounded-sm.font-mono.text-sm.px-2.w-auto.max-w-max.break-normal.text-purple-500.bg-blue-100= resource.task_klass
|
22
22
|
%td.px-6.py-4.whitespace-nowrap.text-sm.text-gray-500= task_state(resource)
|
23
23
|
%td.px-6.py-4.whitespace-nowrap.text-sm.text-gray-500
|
24
|
-
- resource.tags
|
24
|
+
- resource.tags&.each do |tag|
|
25
25
|
%span.inline-flex.items-center.px-3.py-0.5.rounded-full.text-sm.font-medium.bg-blue-100.text-blue-800= tag
|
26
26
|
%td.px-6.py-4.whitespace-nowrap.text-sm.text-gray-500= resource.created_at.to_s
|
27
27
|
%td.px-6.py-4.whitespace-nowrap.text-right.text-sm.font-medium
|
@@ -36,9 +36,9 @@
|
|
36
36
|
%ul.border.border-gray-200.rounded-md.divide-y.divide-gray-200{:role => "list"}
|
37
37
|
%li.pl-3.pr-4.py-3.flex.items-center.justify-between.text-sm
|
38
38
|
.w-0.flex-1.flex.items-center
|
39
|
-
/ Heroicon name: solid/paper-clip
|
40
39
|
%svg.flex-shrink-0.h-5.w-5.text-gray-400{"aria-hidden" => "true", :fill => "currentColor", :viewbox => "0 0 20 20", :xmlns => "http://www.w3.org/2000/svg"}
|
41
40
|
%path{"clip-rule" => "evenodd", :d => "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", "fill-rule" => "evenodd"}
|
42
41
|
%span.ml-2.flex-1.w-0.truncate #{@resource.file_name}
|
42
|
+
%span.text-sm.text-gray-500 #{number_to_human_size(@resource.file_size)}
|
43
43
|
.ml-4.flex-shrink-0
|
44
44
|
= link_to 'Download', @resource.file_url, class: 'font-medium text-indigo-400 hover:text-indigo-900'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators/migration'
|
4
|
+
|
5
|
+
module Perilune
|
6
|
+
module Generators
|
7
|
+
class InstallGenerator < ::Rails::Generators::Base
|
8
|
+
include Rails::Generators::Migration
|
9
|
+
source_root File.expand_path('templates', __dir__)
|
10
|
+
desc 'add the migrations'
|
11
|
+
|
12
|
+
def self.next_migration_number(*)
|
13
|
+
if @prev_migration_nr
|
14
|
+
@prev_migration_nr += 1
|
15
|
+
else
|
16
|
+
@prev_migration_nr = Time.zone.now.utc.strftime('%Y%m%d%H%M%S').to_i
|
17
|
+
end
|
18
|
+
@prev_migration_nr.to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def copy_migrations
|
22
|
+
migration_template 'create_periline_tasks.rb', 'db/migrate/create_periline_tasks.rb'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class CreatePeriluneTask < ActiveRecord::Migration[7.0]
|
4
|
+
def change # rubocop:disable Metrics/MethodLength
|
5
|
+
create_table :perilune_tasks do |t|
|
6
|
+
t.string :task_klass
|
7
|
+
t.jsonb :attrs
|
8
|
+
t.string :state
|
9
|
+
t.text :tags, array: true, default: []
|
10
|
+
t.jsonb :error_data
|
11
|
+
t.string :task_type
|
12
|
+
t.datetime :processing_at
|
13
|
+
t.datetime :processed_at
|
14
|
+
t.datetime :failed_at
|
15
|
+
t.timestamps
|
16
|
+
end
|
17
|
+
add_index :perilune_tasks, :tags, using: :gin
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Perilune
|
4
|
+
class Configuration
|
5
|
+
attr_accessor :queue_name, :stat_driver
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@queue_name = :default
|
9
|
+
@stat_driver = ::Trifle::Stats::Driver::Redis.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def stats_driver_config
|
13
|
+
config = ::Trifle::Stats::Configuration.new
|
14
|
+
config.driver = @stat_driver
|
15
|
+
config.time_zone = 'GMT'
|
16
|
+
config.beginning_of_week = :monday
|
17
|
+
config.track_ranges = %i[hour day week month quarter year]
|
18
|
+
config
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/perilune/tasks/mixin.rb
CHANGED
@@ -18,6 +18,7 @@ module Perilune
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def execute
|
21
|
+
task.update(state: 'processing')
|
21
22
|
operate
|
22
23
|
rescue StandardError => e
|
23
24
|
failure(e.message)
|
@@ -58,6 +59,18 @@ module Perilune
|
|
58
59
|
key: task.id, reference: task.id, config: tracer_config
|
59
60
|
)
|
60
61
|
end
|
62
|
+
|
63
|
+
def track_stats(event:, success:)
|
64
|
+
Trifle::Stats.track(
|
65
|
+
key: "perilune::#{event.downcase}", at: Time.zone.now,
|
66
|
+
config: Perilune.default.stats_driver_config,
|
67
|
+
values: {
|
68
|
+
count: 1,
|
69
|
+
success: success ? 1 : 0,
|
70
|
+
failure: success ? 0 : 1
|
71
|
+
}
|
72
|
+
)
|
73
|
+
end
|
61
74
|
end
|
62
75
|
end
|
63
76
|
end
|
data/lib/perilune/version.rb
CHANGED
data/lib/perilune.rb
CHANGED
@@ -2,7 +2,18 @@
|
|
2
2
|
|
3
3
|
require 'perilune/engine'
|
4
4
|
require 'perilune/tasks/mixin'
|
5
|
+
require 'perilune/configuration'
|
5
6
|
|
6
7
|
module Perilune
|
7
|
-
|
8
|
+
FACTORY_PATH = File.expand_path('../spec/factories', __dir__)
|
9
|
+
|
10
|
+
def self.default
|
11
|
+
@default ||= Configuration.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.configure
|
15
|
+
yield(default)
|
16
|
+
|
17
|
+
default
|
18
|
+
end
|
8
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: perilune
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kartavya Pareek
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-07-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ledger_sync-domains
|
@@ -17,21 +17,21 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.
|
20
|
+
version: '1.2'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 1.
|
27
|
+
version: '1.2'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rails
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 7.0
|
34
|
+
version: '7.0'
|
35
35
|
- - ">="
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: 7.0.0.0
|
@@ -41,7 +41,7 @@ dependencies:
|
|
41
41
|
requirements:
|
42
42
|
- - "~>"
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: 7.0
|
44
|
+
version: '7.0'
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 7.0.0.0
|
@@ -59,6 +59,34 @@ dependencies:
|
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: trifle-stats
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
type: :runtime
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: database_cleaner-active_record
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
62
90
|
- !ruby/object:Gem::Dependency
|
63
91
|
name: dotenv-rails
|
64
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,6 +129,20 @@ dependencies:
|
|
101
129
|
- - ">="
|
102
130
|
- !ruby/object:Gem::Version
|
103
131
|
version: '0'
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: pry
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.13.1
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.13.1
|
104
146
|
- !ruby/object:Gem::Dependency
|
105
147
|
name: rspec-rails
|
106
148
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,7 +157,22 @@ dependencies:
|
|
115
157
|
- - ">="
|
116
158
|
- !ruby/object:Gem::Version
|
117
159
|
version: '0'
|
118
|
-
|
160
|
+
- !ruby/object:Gem::Dependency
|
161
|
+
name: timecop
|
162
|
+
requirement: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
type: :development
|
168
|
+
prerelease: false
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
description: Perilune is a Rails Engine that allows you to define Task classes for
|
175
|
+
procesing files and handles their processing on the background for you.
|
119
176
|
email:
|
120
177
|
- hi@dropbot.sh
|
121
178
|
executables: []
|
@@ -135,9 +192,10 @@ files:
|
|
135
192
|
- app/mailers/perilune/application_mailer.rb
|
136
193
|
- app/models/perilune/application_record.rb
|
137
194
|
- app/models/perilune/task.rb
|
138
|
-
- app/operations/perilune/tasks/create_operation.rb
|
139
195
|
- app/operations/perilune/tasks/exports/create_operation.rb
|
140
196
|
- app/operations/perilune/tasks/find_operation.rb
|
197
|
+
- app/operations/perilune/tasks/imports/create_operation.rb
|
198
|
+
- app/operations/perilune/tasks/search_by_tag_operation.rb
|
141
199
|
- app/operations/perilune/tasks/search_operation.rb
|
142
200
|
- app/serializers/perilune/tasks/serializer.rb
|
143
201
|
- app/views/kaminari/_first_page.html.haml
|
@@ -151,17 +209,21 @@ files:
|
|
151
209
|
- app/views/perilune/home/index.html.haml
|
152
210
|
- app/views/perilune/tasks/index.html.haml
|
153
211
|
- app/views/perilune/tasks/show.html.haml
|
212
|
+
- config/github_database.yml
|
154
213
|
- config/routes.rb
|
214
|
+
- lib/generators/perilune/install/install_generator.rb
|
215
|
+
- lib/generators/perilune/install/templates/create_periline_tasks.rb
|
155
216
|
- lib/perilune.rb
|
217
|
+
- lib/perilune/configuration.rb
|
156
218
|
- lib/perilune/engine.rb
|
157
219
|
- lib/perilune/tasks/mixin.rb
|
158
220
|
- lib/perilune/version.rb
|
159
221
|
- lib/tasks/perilune_tasks.rake
|
160
|
-
homepage: https://
|
222
|
+
homepage: https://dropbot.sh
|
161
223
|
licenses:
|
162
224
|
- MIT
|
163
225
|
metadata:
|
164
|
-
homepage_uri: https://
|
226
|
+
homepage_uri: https://dropbot.sh
|
165
227
|
source_code_uri: https://github.com/sandbite/perilune
|
166
228
|
changelog_uri: https://github.com/sandbite/perilune/blob/main/CHANGELOG.md
|
167
229
|
post_install_message:
|
@@ -182,5 +244,5 @@ requirements: []
|
|
182
244
|
rubygems_version: 3.2.9
|
183
245
|
signing_key:
|
184
246
|
specification_version: 4
|
185
|
-
summary:
|
247
|
+
summary: Add Imports and Exports to your app with ease.
|
186
248
|
test_files: []
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Perilune
|
4
|
-
module Tasks
|
5
|
-
class CreateOperation
|
6
|
-
include LedgerSync::Domains::Operation::Mixin
|
7
|
-
|
8
|
-
class Contract < LedgerSync::Ledgers::Contract
|
9
|
-
params do
|
10
|
-
required(:file).maybe(type?: File)
|
11
|
-
required(:file).maybe(type?: Tempfile)
|
12
|
-
required(:task_klass).filled(:string)
|
13
|
-
optional(:tags).filled(:array)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def operate
|
20
|
-
attach!
|
21
|
-
if task.save
|
22
|
-
Perilune::Tasks::ExecutorJob.perform_later(task.id)
|
23
|
-
success(true)
|
24
|
-
else
|
25
|
-
failure(task.errors.full_messages)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def task
|
30
|
-
@task ||= Perilune::Task.new(
|
31
|
-
state: 'draft',
|
32
|
-
task_klass: params[:task_klass],
|
33
|
-
tags: params[:tags]
|
34
|
-
)
|
35
|
-
end
|
36
|
-
|
37
|
-
def attach!
|
38
|
-
task.file.attach(
|
39
|
-
io: params[:file],
|
40
|
-
key: "perilune/#{ActiveStorage::Blob.generate_unique_secure_token}",
|
41
|
-
filename: "#{params[:task_klass]}_#{Time.zone.now.to_i}"
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
# override to use common serializer for all domain
|
46
|
-
def serializer_for(*)
|
47
|
-
Perilune::Tasks::Serializer.new
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|