solidus_importer 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.circleci/config.yml +35 -0
- data/.gem_release.yml +5 -0
- data/.github/stale.yml +17 -0
- data/.gitignore +20 -0
- data/.hound.yml +8 -0
- data/.rspec +2 -0
- data/.rubocop.yml +2 -0
- data/Gemfile +33 -0
- data/LICENSE +26 -0
- data/README.md +170 -0
- data/Rakefile +6 -0
- data/app/assets/javascripts/spree/backend/solidus_importer.js +2 -0
- data/app/assets/javascripts/spree/frontend/solidus_importer.js +2 -0
- data/app/assets/stylesheets/spree/backend/solidus_importer.css +16 -0
- data/app/assets/stylesheets/spree/frontend/solidus_importer.css +4 -0
- data/app/controllers/spree/admin/solidus_importer/import_rows_controller.rb +24 -0
- data/app/controllers/spree/admin/solidus_importer/imports_controller.rb +44 -0
- data/app/jobs/solidus_importer/import_job.rb +30 -0
- data/app/models/solidus_importer/import.rb +48 -0
- data/app/models/solidus_importer/row.rb +26 -0
- data/app/views/spree/admin/solidus_importer/import_rows/show.html.erb +46 -0
- data/app/views/spree/admin/solidus_importer/imports/_form.html.erb +14 -0
- data/app/views/spree/admin/solidus_importer/imports/index.html.erb +80 -0
- data/app/views/spree/admin/solidus_importer/imports/new.html.erb +13 -0
- data/app/views/spree/admin/solidus_importer/imports/show.html.erb +87 -0
- data/bin/console +17 -0
- data/bin/rails +7 -0
- data/bin/rails-engine +13 -0
- data/bin/rails-sandbox +16 -0
- data/bin/rake +7 -0
- data/bin/sandbox +84 -0
- data/bin/setup +8 -0
- data/config/initializers/spree.rb +11 -0
- data/config/locales/en.yml +28 -0
- data/config/routes.rb +11 -0
- data/db/migrate/20191216101011_create_solidus_importer_imports.rb +19 -0
- data/db/migrate/20191216101012_create_solidus_importer_rows.rb +14 -0
- data/examples/importers/custom_importer.rb +20 -0
- data/examples/processors/notify_on_failure.rb +22 -0
- data/lib/generators/solidus_importer/install/install_generator.rb +22 -0
- data/lib/solidus_importer.rb +25 -0
- data/lib/solidus_importer/base_importer.rb +26 -0
- data/lib/solidus_importer/configuration.rb +39 -0
- data/lib/solidus_importer/engine.rb +23 -0
- data/lib/solidus_importer/exception.rb +5 -0
- data/lib/solidus_importer/factories.rb +4 -0
- data/lib/solidus_importer/process_import.rb +88 -0
- data/lib/solidus_importer/process_row.rb +46 -0
- data/lib/solidus_importer/processors/address.rb +47 -0
- data/lib/solidus_importer/processors/base.rb +15 -0
- data/lib/solidus_importer/processors/customer.rb +41 -0
- data/lib/solidus_importer/processors/log.rb +15 -0
- data/lib/solidus_importer/processors/option_types.rb +43 -0
- data/lib/solidus_importer/processors/option_values.rb +49 -0
- data/lib/solidus_importer/processors/order.rb +40 -0
- data/lib/solidus_importer/processors/product.rb +51 -0
- data/lib/solidus_importer/processors/product_images.rb +30 -0
- data/lib/solidus_importer/processors/taxon.rb +52 -0
- data/lib/solidus_importer/processors/variant.rb +51 -0
- data/lib/solidus_importer/processors/variant_images.rb +30 -0
- data/lib/solidus_importer/version.rb +5 -0
- data/solidus_importer.gemspec +36 -0
- data/spec/factories/solidus_importer_imports.rb +27 -0
- data/spec/factories/solidus_importer_rows.rb +82 -0
- data/spec/features/admin/solidus_importer/import_rows_spec.rb +30 -0
- data/spec/features/admin/solidus_importer/imports_spec.rb +121 -0
- data/spec/features/solidus_importer/import_spec.rb +138 -0
- data/spec/features/solidus_importer/processors_spec.rb +53 -0
- data/spec/fixtures/solidus_importer/apparel.csv +23 -0
- data/spec/fixtures/solidus_importer/customers.csv +3 -0
- data/spec/fixtures/solidus_importer/home-and-garden.csv +22 -0
- data/spec/fixtures/solidus_importer/invalid_headers.csv +3 -0
- data/spec/fixtures/solidus_importer/invalid_product.csv +2 -0
- data/spec/fixtures/solidus_importer/jewelery.csv +55 -0
- data/spec/fixtures/solidus_importer/orders.csv +5 -0
- data/spec/fixtures/solidus_importer/products.csv +8 -0
- data/spec/fixtures/solidus_importer/thinking-cat.jpg +0 -0
- data/spec/jobs/solidus_importer/import_job_spec.rb +54 -0
- data/spec/lib/solidus_importer/base_importer_spec.rb +23 -0
- data/spec/lib/solidus_importer/process_import_spec.rb +74 -0
- data/spec/lib/solidus_importer/process_row_spec.rb +24 -0
- data/spec/lib/solidus_importer/processors/address_spec.rb +18 -0
- data/spec/lib/solidus_importer/processors/base_spec.rb +9 -0
- data/spec/lib/solidus_importer/processors/customer_spec.rb +65 -0
- data/spec/lib/solidus_importer/processors/log_spec.rb +18 -0
- data/spec/lib/solidus_importer/processors/option_types_spec.rb +38 -0
- data/spec/lib/solidus_importer/processors/option_values_spec.rb +43 -0
- data/spec/lib/solidus_importer/processors/order_spec.rb +56 -0
- data/spec/lib/solidus_importer/processors/product_images_spec.rb +42 -0
- data/spec/lib/solidus_importer/processors/product_spec.rb +66 -0
- data/spec/lib/solidus_importer/processors/taxon_spec.rb +33 -0
- data/spec/lib/solidus_importer/processors/variant_images_spec.rb +44 -0
- data/spec/lib/solidus_importer/processors/variant_spec.rb +86 -0
- data/spec/lib/solidus_importer_spec.rb +14 -0
- data/spec/models/solidus_importer/import_spec.rb +60 -0
- data/spec/models/solidus_importer/row_spec.rb +18 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/support/solidus_importer_helpers.rb +13 -0
- metadata +227 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusImporter
|
4
|
+
class ImportJob < ActiveJob::Base
|
5
|
+
queue_as :default
|
6
|
+
|
7
|
+
retry_on ActiveRecord::Deadlocked
|
8
|
+
|
9
|
+
def perform(source, import_type = nil)
|
10
|
+
raise ArgumentError, 'Missing import source' unless source
|
11
|
+
|
12
|
+
if source.is_a?(Integer)
|
13
|
+
perform_import_from_model(source)
|
14
|
+
elsif source.is_a?(String) && import_type.present?
|
15
|
+
perform_import_from_filename(source, import_type)
|
16
|
+
else
|
17
|
+
raise ArgumentError, "#{source} should be a filename or an Import id"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def perform_import_from_model(id)
|
22
|
+
import = ::SolidusImporter::Import.find(id)
|
23
|
+
::SolidusImporter::ProcessImport.new(import).process
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform_import_from_filename(filename, import_type)
|
27
|
+
::SolidusImporter::ProcessImport.import_from_file(filename, import_type)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusImporter
|
4
|
+
class Import < ApplicationRecord
|
5
|
+
self.table_name = 'solidus_importer_imports'
|
6
|
+
|
7
|
+
attr_accessor :importer
|
8
|
+
|
9
|
+
has_many :rows,
|
10
|
+
class_name: 'SolidusImporter::Row',
|
11
|
+
inverse_of: :import,
|
12
|
+
dependent: :destroy
|
13
|
+
|
14
|
+
enum state: {
|
15
|
+
created: 'created',
|
16
|
+
processing: 'processing',
|
17
|
+
failed: 'failed',
|
18
|
+
completed: 'completed'
|
19
|
+
}
|
20
|
+
|
21
|
+
has_attached_file :file
|
22
|
+
|
23
|
+
do_not_validate_attachment_file_type :file
|
24
|
+
validates_attachment_presence :file
|
25
|
+
validates :import_type, presence: true, allow_blank: false
|
26
|
+
validates :state, presence: true, allow_blank: false
|
27
|
+
|
28
|
+
def created_or_failed?
|
29
|
+
%w[created failed].include? state
|
30
|
+
end
|
31
|
+
|
32
|
+
def finished?
|
33
|
+
rows.failed_or_completed.size == rows.size
|
34
|
+
end
|
35
|
+
|
36
|
+
def import_file=(path)
|
37
|
+
raise SolidusImporter::Exception, 'Existing file required' if !path || !File.exist?(path)
|
38
|
+
|
39
|
+
self.file = File.open(path, 'r')
|
40
|
+
end
|
41
|
+
|
42
|
+
class << self
|
43
|
+
def available_types
|
44
|
+
SolidusImporter::Import.select(:import_type).order(:import_type).group(:import_type).pluck(:import_type)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusImporter
|
4
|
+
class Row < ApplicationRecord
|
5
|
+
self.table_name = 'solidus_importer_rows'
|
6
|
+
|
7
|
+
belongs_to :import,
|
8
|
+
class_name: 'SolidusImporter::Import',
|
9
|
+
inverse_of: :rows
|
10
|
+
|
11
|
+
serialize :data, JSON
|
12
|
+
|
13
|
+
enum state: {
|
14
|
+
created: 'created',
|
15
|
+
processing: 'processing',
|
16
|
+
failed: 'failed',
|
17
|
+
completed: 'completed'
|
18
|
+
}
|
19
|
+
|
20
|
+
scope :created_or_failed, -> { where(state: %i[created failed]) }
|
21
|
+
scope :failed_or_completed, -> { where(state: %i[failed completed]) }
|
22
|
+
|
23
|
+
validates :data, presence: true, allow_blank: false
|
24
|
+
validates :state, presence: true, allow_blank: false
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<%
|
2
|
+
admin_layout('full-width')
|
3
|
+
import_id = @import_row.import_id
|
4
|
+
admin_breadcrumb(
|
5
|
+
t('spree.solidus_importer.title'),
|
6
|
+
link_to(t('spree.solidus_importer.imports'), admin_solidus_importer_imports_path),
|
7
|
+
link_to(import_id.to_s, admin_solidus_importer_import_path(id: import_id)),
|
8
|
+
t('spree.solidus_importer.import_rows'),
|
9
|
+
@import_row.id.to_s
|
10
|
+
)
|
11
|
+
%>
|
12
|
+
|
13
|
+
<div data-hook="admin_solidus_importer_import_rows_show">
|
14
|
+
<dl>
|
15
|
+
<dt><%= t('spree.id') %></dt>
|
16
|
+
<dd><%= @import_row.id %></dd>
|
17
|
+
<dt><%= t('spree.state') %></dt>
|
18
|
+
<dd class="solidus_importer state-<%= @import_row.state %>"><%= @import_row.state %></dd>
|
19
|
+
<dt><%= t('spree.solidus_importer.created_at') %></dt>
|
20
|
+
<dd><%= @import_row.created_at %></dd>
|
21
|
+
<dt><%= t('spree.solidus_importer.updated_at') %></dt>
|
22
|
+
<dd><%= @import_row.updated_at %></dd>
|
23
|
+
<dt><%= t('spree.solidus_importer.messages') %></dt>
|
24
|
+
<dd><%= @import_row.messages.blank? ? '-' : @import_row.messages %></dd>
|
25
|
+
<% if @log_details %>
|
26
|
+
<dt><%= t('spree.solidus_importer.log_entry') %></dt>
|
27
|
+
<dd><%= @log_details %></dd>
|
28
|
+
<% end %>
|
29
|
+
<% if @target_entity %>
|
30
|
+
<dt><%= t('spree.solidus_importer.target_entity') %></dt>
|
31
|
+
<dd>
|
32
|
+
<%= link_to("#{@target_entity.class} ##{@target_entity.id}", url_for([:admin, @target_entity])) rescue '-' %>
|
33
|
+
</dd>
|
34
|
+
<% end %>
|
35
|
+
<dt><%= t('spree.solidus_importer.data') %></dt>
|
36
|
+
</dl>
|
37
|
+
|
38
|
+
<table class="table">
|
39
|
+
<% @import_row.data.each do |k, v| %>
|
40
|
+
<tr class="import_row_attribute">
|
41
|
+
<td class="key"><%= k %></td>
|
42
|
+
<td class="value"><%= v %></td>
|
43
|
+
</tr>
|
44
|
+
<% end %>
|
45
|
+
</table>
|
46
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-4">
|
3
|
+
<div class="field">
|
4
|
+
<%= f.label :import_type %><br>
|
5
|
+
<%= f.select :import_type, [nil] + @import_types %>
|
6
|
+
</div>
|
7
|
+
</div>
|
8
|
+
<div class="col-3">
|
9
|
+
<div class="field">
|
10
|
+
<%= f.label :file %><br>
|
11
|
+
<%= f.file_field :file %>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
</div>
|
@@ -0,0 +1,80 @@
|
|
1
|
+
<% admin_layout('full-width') %>
|
2
|
+
<% admin_breadcrumb(t('spree.solidus_importer.title'), t('spree.solidus_importer.imports')) %>
|
3
|
+
|
4
|
+
<% content_for :page_actions do %>
|
5
|
+
<li>
|
6
|
+
<%= link_to t('spree.admin.solidus_importer.new'), new_admin_solidus_importer_import_url, id: 'admin_new_order', class: 'btn btn-primary' %>
|
7
|
+
</li>
|
8
|
+
<% end if can? :create, SolidusImporter::Import %>
|
9
|
+
|
10
|
+
<% content_for :table_filter do %>
|
11
|
+
<%= search_form_for [:admin, @search], url: admin_solidus_importer_imports_path do |f| %>
|
12
|
+
<div class="row">
|
13
|
+
<div class="col-md-4">
|
14
|
+
<div class="form-group">
|
15
|
+
<%= label_tag :q_import_type_eq, t('spree.type') %>:
|
16
|
+
<%= f.select :import_type_eq, SolidusImporter::Import.available_types, { include_blank: true }, class: 'select2 js-filterable' %>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
<div class="col-md-2">
|
20
|
+
<div class="form-group">
|
21
|
+
<%= label_tag :q_state_eq, t('spree.state') %>:
|
22
|
+
<%= f.select :state_eq, SolidusImporter::Import.states, { include_blank: true }, class: 'select2 js-filterable' %>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
<div class="col-md-2">
|
26
|
+
<div class="input-group">
|
27
|
+
<%= f.text_field :created_at_gt, class: 'datepicker datepicker-from form-control', value: params.dig(:q, :created_at_gt), autocomplete: 'off', placeholder: t('spree.solidus_importer.updated_at_from') %>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
<div class="col-md-2">
|
31
|
+
<div class="input-group">
|
32
|
+
<%= f.text_field :created_at_lt, class: 'datepicker datepicker-to form-control', value: params.dig(:q, :created_at_lt), autocomplete: 'off', placeholder: t('spree.solidus_importer.updated_at_to') %>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<div class="col-md-2 text-right">
|
36
|
+
<%= button_tag t('spree.filter_results') %>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
<% end %>
|
40
|
+
<% end %>
|
41
|
+
|
42
|
+
<div data-hook="admin_solidus_importer_imports_index">
|
43
|
+
<%= paginate @imports, theme: 'solidus_admin' %>
|
44
|
+
|
45
|
+
<% if @imports.any? %>
|
46
|
+
<table class="table table-bordered table-striped">
|
47
|
+
<thead>
|
48
|
+
<tr>
|
49
|
+
<th><%= sort_link @search, :id, t('spree.id') %></th>
|
50
|
+
<th><%= sort_link @search, :import_type, t('spree.type') %></th>
|
51
|
+
<th><%= sort_link @search, :state, t('spree.state') %></th>
|
52
|
+
<th><%= t('spree.solidus_importer.import_rows') %></th>
|
53
|
+
<th><%= sort_link @search, :updated_at, t('spree.solidus_importer.updated_at') %></th>
|
54
|
+
<th class="actions"></th>
|
55
|
+
</tr>
|
56
|
+
</thead>
|
57
|
+
<tbody>
|
58
|
+
<% @imports.each do |import| %>
|
59
|
+
<% link_details = admin_solidus_importer_import_path(id: import.id) %>
|
60
|
+
<tr class='solidus_importer_import'>
|
61
|
+
<td><%= link_to import.id.to_s, link_details %></td>
|
62
|
+
<td><%= import.import_type %></td>
|
63
|
+
<td class="solidus_importer state-<%= import.state %>"><%= import.state %></td>
|
64
|
+
<th><%= import.rows.count %></th>
|
65
|
+
<td><%= l(import.updated_at) %></td>
|
66
|
+
<td><%= link_to 'Details', link_details, class: 'fa fa-eye icon_link', 'data-action': 'view' %></td>
|
67
|
+
</tr>
|
68
|
+
<% end %>
|
69
|
+
</tbody>
|
70
|
+
</table>
|
71
|
+
<% else %>
|
72
|
+
<div class="no-objects-found">
|
73
|
+
<%= render 'spree/admin/shared/no_objects_found',
|
74
|
+
resource: SolidusImporter::Import,
|
75
|
+
new_resource_url: new_object_url %>
|
76
|
+
</div>
|
77
|
+
<% end %>
|
78
|
+
|
79
|
+
<%= paginate @imports, theme: 'solidus_admin' %>
|
80
|
+
</div>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% admin_breadcrumb t('spree.solidus_importer.title'), link_to(t('spree.solidus_importer.imports'), admin_solidus_importer_imports_path) %>
|
2
|
+
|
3
|
+
<%= form_for [:admin, @import], method: :post, html: { multipart: true } do |f| %>
|
4
|
+
<fieldset class="no-border-top">
|
5
|
+
<%= render partial: 'spree/shared/error_messages', locals: { target: @import } %>
|
6
|
+
<%= render partial: 'form', locals: { f: f } %>
|
7
|
+
|
8
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
9
|
+
<%= f.submit t('spree.actions.create'), class: 'btn btn-primary' %>
|
10
|
+
</div>
|
11
|
+
</fieldset>
|
12
|
+
<% end %>
|
13
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
<%
|
2
|
+
admin_layout('full-width')
|
3
|
+
admin_breadcrumb(
|
4
|
+
t('spree.solidus_importer.title'),
|
5
|
+
link_to(t('spree.solidus_importer.imports'), admin_solidus_importer_imports_path),
|
6
|
+
@import.id.to_s
|
7
|
+
)
|
8
|
+
%>
|
9
|
+
|
10
|
+
<div data-hook="admin_solidus_importer_imports_show">
|
11
|
+
<dl>
|
12
|
+
<dt><%= t('spree.id') %></dt>
|
13
|
+
<dd><%= @import.id %></dd>
|
14
|
+
<dt><%= t('spree.type') %></dt>
|
15
|
+
<dd><%= @import.import_type %></dd>
|
16
|
+
<dt><%= t('spree.state') %></dt>
|
17
|
+
<dd class="solidus_importer state-<%= @import.state %>"><%= @import.state %></dd>
|
18
|
+
<dt><%= t('spree.solidus_importer.import') %></dt>
|
19
|
+
<dd><%= link_to @import.file_file_name, @import.file.url %></dd>
|
20
|
+
<dt><%= t('spree.solidus_importer.import_rows') %></dt>
|
21
|
+
<dd><%= @import.rows.count %></dd>
|
22
|
+
<dt><%= t('spree.solidus_importer.created_at') %></dt>
|
23
|
+
<dd><%= @import.created_at %></dd>
|
24
|
+
<dt><%= t('spree.solidus_importer.updated_at') %></dt>
|
25
|
+
<dd><%= @import.updated_at %></dd>
|
26
|
+
<dt><%= t('spree.solidus_importer.messages') %></dt>
|
27
|
+
<dd><%= @import.messages.blank? ? '-' : @import.messages %></dd>
|
28
|
+
</dl>
|
29
|
+
|
30
|
+
<hr/>
|
31
|
+
|
32
|
+
<%= search_form_for [:admin, @search], url: admin_solidus_importer_import_path(@import) do |f| %>
|
33
|
+
<div class="row">
|
34
|
+
<div class="col-md-3">
|
35
|
+
<div class="form-group">
|
36
|
+
<%= label_tag :q_state_eq, t('spree.state') %>:
|
37
|
+
<%= f.select :state_eq, SolidusImporter::Import.states, { include_blank: true }, class: 'select2 js-filterable' %>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
<div class="col-md-3">
|
41
|
+
<div class="input-group">
|
42
|
+
<%= f.text_field :created_at_gt, class: 'datepicker datepicker-from form-control', value: params.dig(:q, :created_at_gt), autocomplete: 'off', placeholder: t('spree.solidus_importer.updated_at_from') %>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
<div class="col-md-3">
|
46
|
+
<div class="input-group">
|
47
|
+
<%= f.text_field :created_at_lt, class: 'datepicker datepicker-to form-control', value: params.dig(:q, :created_at_lt), autocomplete: 'off', placeholder: t('spree.solidus_importer.updated_at_to') %>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
<div class="col-md-3 text-right">
|
51
|
+
<%= button_tag t('spree.filter_results') %>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
<% end %>
|
55
|
+
|
56
|
+
<%= paginate @import_rows, theme: 'solidus_admin' %>
|
57
|
+
|
58
|
+
<% if @import_rows.any? %>
|
59
|
+
<table class="table table-bordered table-striped">
|
60
|
+
<thead>
|
61
|
+
<tr>
|
62
|
+
<th><%= sort_link @search, :id, t('spree.id') %></th>
|
63
|
+
<th><%= sort_link @search, :state, t('spree.state') %></th>
|
64
|
+
<th><%= sort_link @search, :updated_at, t('spree.solidus_importer.updated_at') %></th>
|
65
|
+
<th class="actions"></th>
|
66
|
+
</tr>
|
67
|
+
</thead>
|
68
|
+
<tbody>
|
69
|
+
<% @import_rows.each do |import_row| %>
|
70
|
+
<% link_details = admin_solidus_importer_import_import_row_path(import_id: @import.id, id: import_row.id) %>
|
71
|
+
<tr class='solidus_importer_import_row'>
|
72
|
+
<td><%= link_to import_row.id.to_s, link_details %></td>
|
73
|
+
<td class="solidus_importer state-<%= import_row.state %>"><%= import_row.state %></td>
|
74
|
+
<td><%= l(import_row.updated_at) %></td>
|
75
|
+
<td><%= link_to 'Details', link_details, class: 'fa fa-eye icon_link', 'data-action': 'view' %></td>
|
76
|
+
</tr>
|
77
|
+
<% end %>
|
78
|
+
</tbody>
|
79
|
+
</table>
|
80
|
+
<% else %>
|
81
|
+
<div class="no-objects-found">
|
82
|
+
<%= render 'spree/admin/shared/no_objects_found', resource: SolidusImporter::Row %>
|
83
|
+
</div>
|
84
|
+
<% end %>
|
85
|
+
|
86
|
+
<%= paginate @import_rows, theme: 'solidus_admin' %>
|
87
|
+
</div>
|
data/bin/console
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require "bundler/setup"
|
6
|
+
require "solidus_importer"
|
7
|
+
|
8
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
9
|
+
# with your gem easier. You can also use a different console, if you like.
|
10
|
+
$LOAD_PATH.unshift(*Dir["#{__dir__}/../app/*"])
|
11
|
+
|
12
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
13
|
+
# require "pry"
|
14
|
+
# Pry.start
|
15
|
+
|
16
|
+
require "irb"
|
17
|
+
IRB.start(__FILE__)
|
data/bin/rails
ADDED
data/bin/rails-engine
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails gems
|
3
|
+
# installed from the root of your application.
|
4
|
+
|
5
|
+
ENGINE_ROOT = File.expand_path('..', __dir__)
|
6
|
+
ENGINE_PATH = File.expand_path('../lib/solidus_importer/engine', __dir__)
|
7
|
+
|
8
|
+
# Set up gems listed in the Gemfile.
|
9
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
|
10
|
+
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
11
|
+
|
12
|
+
require 'rails/all'
|
13
|
+
require 'rails/engine/commands'
|
data/bin/rails-sandbox
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
app_root = 'sandbox'
|
4
|
+
|
5
|
+
unless File.exist? "#{app_root}/bin/rails"
|
6
|
+
warn 'Creating the sandbox app...'
|
7
|
+
Dir.chdir "#{__dir__}/.." do
|
8
|
+
system "#{__dir__}/sandbox" or begin # rubocop:disable Style/AndOr
|
9
|
+
warn 'Automatic creation of the sandbox app failed'
|
10
|
+
exit 1
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir.chdir app_root
|
16
|
+
exec 'bin/rails', *ARGV
|
data/bin/rake
ADDED
data/bin/sandbox
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
case "$DB" in
|
6
|
+
postgres|postgresql)
|
7
|
+
RAILSDB="postgresql"
|
8
|
+
;;
|
9
|
+
mysql)
|
10
|
+
RAILSDB="mysql"
|
11
|
+
;;
|
12
|
+
sqlite|'')
|
13
|
+
RAILSDB="sqlite3"
|
14
|
+
;;
|
15
|
+
*)
|
16
|
+
echo "Invalid DB specified: $DB"
|
17
|
+
exit 1
|
18
|
+
;;
|
19
|
+
esac
|
20
|
+
|
21
|
+
if [ ! -z $SOLIDUS_BRANCH ]
|
22
|
+
then
|
23
|
+
BRANCH=$SOLIDUS_BRANCH
|
24
|
+
else
|
25
|
+
BRANCH="master"
|
26
|
+
fi
|
27
|
+
|
28
|
+
extension_name="solidus_importer"
|
29
|
+
|
30
|
+
# Stay away from the bundler env of the containing extension.
|
31
|
+
function unbundled {
|
32
|
+
ruby -rbundler -e'b = proc {system *ARGV}; Bundler.respond_to?(:with_unbundled_env) ? Bundler.with_unbundled_env(&b) : Bundler.with_clean_env(&b)' -- $@
|
33
|
+
}
|
34
|
+
|
35
|
+
rm -rf ./sandbox
|
36
|
+
unbundled bundle exec rails new sandbox --database="$RAILSDB" \
|
37
|
+
--skip-bundle \
|
38
|
+
--skip-git \
|
39
|
+
--skip-keeps \
|
40
|
+
--skip-rc \
|
41
|
+
--skip-spring \
|
42
|
+
--skip-test \
|
43
|
+
--skip-javascript
|
44
|
+
|
45
|
+
if [ ! -d "sandbox" ]; then
|
46
|
+
echo 'sandbox rails application failed'
|
47
|
+
exit 1
|
48
|
+
fi
|
49
|
+
|
50
|
+
cd ./sandbox
|
51
|
+
cat <<RUBY >> Gemfile
|
52
|
+
gem 'solidus', github: 'solidusio/solidus', branch: '$BRANCH'
|
53
|
+
gem 'solidus_auth_devise', '>= 2.1.0'
|
54
|
+
gem 'rails-i18n'
|
55
|
+
gem 'solidus_i18n'
|
56
|
+
|
57
|
+
gem '$extension_name', path: '..'
|
58
|
+
|
59
|
+
group :test, :development do
|
60
|
+
platforms :mri do
|
61
|
+
gem 'pry-byebug'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
RUBY
|
65
|
+
|
66
|
+
unbundled bundle install --gemfile Gemfile
|
67
|
+
|
68
|
+
unbundled bundle exec rake db:drop db:create
|
69
|
+
|
70
|
+
unbundled bundle exec rails generate spree:install \
|
71
|
+
--auto-accept \
|
72
|
+
--user_class=Spree::User \
|
73
|
+
--enforce_available_locales=true \
|
74
|
+
--with-authentication=false \
|
75
|
+
$@
|
76
|
+
|
77
|
+
unbundled bundle exec rails generate solidus:auth:install
|
78
|
+
|
79
|
+
echo
|
80
|
+
echo "🚀 Sandbox app successfully created for $extension_name!"
|
81
|
+
echo "🚀 Using $RAILSDB and Solidus $BRANCH"
|
82
|
+
echo "🚀 Use 'export DB=[postgres|mysql|sqlite]' to control the DB adapter"
|
83
|
+
echo "🚀 Use 'export SOLIDUS_BRANCH=<BRANCH-NAME>' to control the Solidus version"
|
84
|
+
echo "🚀 This app is intended for test purposes."
|