comable-core 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +97 -0
- data/app/assets/javascripts/comable/application.js +13 -0
- data/app/assets/stylesheets/comable/application.css +13 -0
- data/app/controllers/concerns/comable/permitted_attributes.rb +15 -0
- data/app/helpers/comable/application_helper.rb +84 -0
- data/app/helpers/comable/products_helper.rb +82 -0
- data/app/mailers/comable/order_mailer.rb +18 -0
- data/app/models/comable/ability.rb +18 -0
- data/app/models/comable/address.rb +39 -0
- data/app/models/comable/category.rb +72 -0
- data/app/models/comable/image.rb +15 -0
- data/app/models/comable/order.rb +121 -0
- data/app/models/comable/order/associations.rb +22 -0
- data/app/models/comable/order/callbacks.rb +43 -0
- data/app/models/comable/order/morrisable.rb +20 -0
- data/app/models/comable/order/scopes.rb +17 -0
- data/app/models/comable/order/validations.rb +39 -0
- data/app/models/comable/order_item.rb +98 -0
- data/app/models/comable/order_item/csvable.rb +32 -0
- data/app/models/comable/page.rb +30 -0
- data/app/models/comable/payment.rb +87 -0
- data/app/models/comable/payment_method.rb +27 -0
- data/app/models/comable/product.rb +55 -0
- data/app/models/comable/product/csvable.rb +20 -0
- data/app/models/comable/shipment.rb +85 -0
- data/app/models/comable/shipment_method.rb +9 -0
- data/app/models/comable/stock.rb +71 -0
- data/app/models/comable/stock/csvable.rb +26 -0
- data/app/models/comable/store.rb +30 -0
- data/app/models/comable/theme.rb +25 -0
- data/app/models/comable/tracker.rb +17 -0
- data/app/models/comable/user.rb +130 -0
- data/app/models/concerns/comable/cart_owner.rb +94 -0
- data/app/models/concerns/comable/checkout.rb +85 -0
- data/app/models/concerns/comable/importable.rb +67 -0
- data/app/models/concerns/comable/liquidable.rb +12 -0
- data/app/models/concerns/comable/product/search.rb +41 -0
- data/app/models/concerns/comable/ransackable.rb +38 -0
- data/app/models/concerns/comable/role_owner.rb +15 -0
- data/app/models/concerns/comable/sku_choice.rb +19 -0
- data/app/models/concerns/comable/sku_item.rb +17 -0
- data/app/uploaders/image_uploader.rb +7 -0
- data/app/views/comable/order_mailer/complete.text.erb +42 -0
- data/config/initializers/comma.rb +8 -0
- data/config/locales/en.yml +424 -0
- data/config/locales/ja.yml +425 -0
- data/db/migrate/20131214194807_create_comable_products.rb +15 -0
- data/db/migrate/20140120032559_create_comable_users.rb +46 -0
- data/db/migrate/20140502060116_create_comable_stocks.rb +14 -0
- data/db/migrate/20140723175431_create_comable_orders.rb +20 -0
- data/db/migrate/20140723175810_create_comable_order_items.rb +19 -0
- data/db/migrate/20140817194104_create_comable_payment_methods.rb +13 -0
- data/db/migrate/20140921191416_create_comable_shipment_methods.rb +11 -0
- data/db/migrate/20140926063541_create_comable_stores.rb +11 -0
- data/db/migrate/20141024025526_create_comable_addresses.rb +17 -0
- data/db/migrate/20150111031228_create_comable_categories.rb +10 -0
- data/db/migrate/20150111031229_create_comable_products_categories.rb +8 -0
- data/db/migrate/20150112173706_create_comable_images.rb +9 -0
- data/db/migrate/20150423095210_create_comable_shipments.rb +13 -0
- data/db/migrate/20150511171940_create_comable_payments.rb +12 -0
- data/db/migrate/20150513185230_create_comable_trackers.rb +12 -0
- data/db/migrate/20150519080729_create_comable_pages.rb +17 -0
- data/db/migrate/20150612143226_create_comable_themes.rb +15 -0
- data/db/migrate/20150612143445_add_theme_id_to_comable_stores.rb +7 -0
- data/db/seeds.rb +5 -0
- data/db/seeds/comable/users.rb +51 -0
- data/lib/comable/core.rb +48 -0
- data/lib/comable/core/configuration.rb +22 -0
- data/lib/comable/core/engine.rb +50 -0
- data/lib/comable/deprecator.rb +26 -0
- data/lib/comable/payment_provider.rb +14 -0
- data/lib/comable/payment_provider/base.rb +42 -0
- data/lib/comable/payment_provider/general.rb +15 -0
- data/lib/comable/state_machine_patch.rb +32 -0
- data/lib/comma_extractor_extentions.rb +31 -0
- data/lib/generators/comable/install/install_generator.rb +133 -0
- data/lib/generators/comable/install/templates/config/initializers/comable.rb +31 -0
- data/lib/tasks/comable_tasks.rake +4 -0
- metadata +346 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateComableStocks < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_stocks do |t|
|
4
|
+
t.references :product, null: false
|
5
|
+
t.string :code, null: false
|
6
|
+
t.integer :quantity, null: false, default: 0
|
7
|
+
t.string :sku_h_choice_name
|
8
|
+
t.string :sku_v_choice_name
|
9
|
+
t.timestamps null: false
|
10
|
+
end
|
11
|
+
|
12
|
+
add_index :comable_stocks, :code, unique: true
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateComableOrders < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_orders do |t|
|
4
|
+
t.references :user
|
5
|
+
t.string :guest_token
|
6
|
+
t.string :code
|
7
|
+
t.string :email
|
8
|
+
t.integer :payment_fee, null: false, default: 0
|
9
|
+
t.integer :shipment_fee, null: false, default: 0
|
10
|
+
t.integer :total_price
|
11
|
+
t.references :bill_address
|
12
|
+
t.references :ship_address
|
13
|
+
t.string :state
|
14
|
+
t.datetime :completed_at
|
15
|
+
t.timestamps null: false
|
16
|
+
end
|
17
|
+
|
18
|
+
add_index :comable_orders, :code, unique: true
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateComableOrderItems < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_order_items do |t|
|
4
|
+
t.references :order, null: false
|
5
|
+
t.references :stock, null: false
|
6
|
+
t.string :name, null: false
|
7
|
+
t.string :code, null: false
|
8
|
+
t.integer :price, null: false
|
9
|
+
t.string :sku_h_item_name
|
10
|
+
t.string :sku_v_item_name
|
11
|
+
t.string :sku_h_choice_name
|
12
|
+
t.string :sku_v_choice_name
|
13
|
+
t.integer :quantity, default: 1, null: false
|
14
|
+
t.timestamps null: false
|
15
|
+
end
|
16
|
+
|
17
|
+
add_index :comable_order_items, [:order_id, :stock_id], unique: true
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateComablePaymentMethods < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_payment_methods do |t|
|
4
|
+
t.string :name, null: false
|
5
|
+
t.string :payment_provider_type, null: false
|
6
|
+
t.integer :payment_provider_kind, null: false
|
7
|
+
t.integer :fee, null: false
|
8
|
+
t.integer :enable_price_from
|
9
|
+
t.integer :enable_price_to
|
10
|
+
t.timestamps null: false
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateComableShipmentMethods < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_shipment_methods do |t|
|
4
|
+
t.boolean :activated_flag, null: false, default: true
|
5
|
+
t.string :name, null: false
|
6
|
+
t.integer :fee, null: false
|
7
|
+
t.string :traking_url
|
8
|
+
t.timestamps null: false
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateComableAddresses < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_addresses do |t|
|
4
|
+
t.references :user
|
5
|
+
t.string :family_name, null: false
|
6
|
+
t.string :first_name, null: false
|
7
|
+
t.string :zip_code, null: false
|
8
|
+
t.references :state
|
9
|
+
t.string :state_name, null: false
|
10
|
+
t.string :city, null: false
|
11
|
+
t.string :detail
|
12
|
+
t.string :phone_number, null: false
|
13
|
+
t.datetime :last_used_at
|
14
|
+
t.timestamps null: false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateComableShipments < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_shipments do |t|
|
4
|
+
t.references :order, null: false
|
5
|
+
t.references :shipment_method, null: false
|
6
|
+
t.integer :fee, null: false
|
7
|
+
t.string :state, null: false
|
8
|
+
t.string :tracking_number
|
9
|
+
t.datetime :completed_at
|
10
|
+
t.timestamps null: false
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateComablePayments < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_payments do |t|
|
4
|
+
t.references :order, null: false
|
5
|
+
t.references :payment_method, null: false
|
6
|
+
t.integer :fee, null: false
|
7
|
+
t.string :state, null: false
|
8
|
+
t.datetime :completed_at
|
9
|
+
t.timestamps null: false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateComableTrackers < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_trackers do |t|
|
4
|
+
t.boolean :activated_flag, null: false, default: true
|
5
|
+
t.string :name, null: false
|
6
|
+
t.string :tracker_id
|
7
|
+
t.text :code, null: false
|
8
|
+
t.string :place, null: false
|
9
|
+
t.timestamps null: false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateComablePages < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_pages do |t|
|
4
|
+
t.string :title, null: false
|
5
|
+
t.text :content, null: false
|
6
|
+
t.string :page_title
|
7
|
+
t.string :meta_description
|
8
|
+
t.string :meta_keywords
|
9
|
+
t.string :slug, null: false
|
10
|
+
t.datetime :published_at
|
11
|
+
|
12
|
+
t.timestamps null: false
|
13
|
+
end
|
14
|
+
|
15
|
+
add_index :comable_pages, :slug, unique: true
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateComableThemes < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_themes do |t|
|
4
|
+
t.string :name, null: false
|
5
|
+
t.string :version, null: false
|
6
|
+
t.string :display
|
7
|
+
t.string :description
|
8
|
+
t.string :homepage
|
9
|
+
t.string :author
|
10
|
+
t.timestamps null: false
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :comable_themes, [:name, :version], unique: true
|
14
|
+
end
|
15
|
+
end
|
data/db/seeds.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
|
3
|
+
def default_email
|
4
|
+
'comable@example.com'
|
5
|
+
end
|
6
|
+
|
7
|
+
def default_password
|
8
|
+
'password'
|
9
|
+
end
|
10
|
+
|
11
|
+
def ask_admin_email
|
12
|
+
if ENV['ADMIN_EMAIL']
|
13
|
+
ENV['ADMIN_EMAIL']
|
14
|
+
else
|
15
|
+
ask("Email [#{default_email}]: ") do |q|
|
16
|
+
q.echo = true
|
17
|
+
q.whitespace = :strip
|
18
|
+
end
|
19
|
+
end.presence || default_email
|
20
|
+
end
|
21
|
+
|
22
|
+
def ask_admin_password
|
23
|
+
if ENV['ADMIN_PASSWORD']
|
24
|
+
ENV['ADMIN_PASSWORD']
|
25
|
+
else
|
26
|
+
ask("Password [#{default_password}]: ") do |q|
|
27
|
+
q.echo = false
|
28
|
+
q.whitespace = :strip
|
29
|
+
end
|
30
|
+
end.presence || default_password
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_admin_user
|
34
|
+
email = ask_admin_email
|
35
|
+
password = ask_admin_password
|
36
|
+
|
37
|
+
if Comable::User.where(email: email).exists?
|
38
|
+
puts "WARNING: The email address has already existed: #{email}"
|
39
|
+
else
|
40
|
+
Comable::User.with_role(:admin).new do |obj|
|
41
|
+
obj.email = email
|
42
|
+
obj.password = password
|
43
|
+
end.save!
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
if Comable::User.with_role(:admin).exists?
|
48
|
+
puts 'Admin user has already been previously created.'
|
49
|
+
else
|
50
|
+
create_admin_user
|
51
|
+
end
|
data/lib/comable/core.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'devise'
|
2
|
+
require 'enumerize'
|
3
|
+
require 'state_machine'
|
4
|
+
require 'ancestry'
|
5
|
+
require 'acts_as_list'
|
6
|
+
require 'carrierwave'
|
7
|
+
require 'cancancan'
|
8
|
+
require 'comma'
|
9
|
+
require 'axlsx_rails'
|
10
|
+
require 'roo'
|
11
|
+
require 'liquid'
|
12
|
+
require 'liquid-rails'
|
13
|
+
require 'friendly_id'
|
14
|
+
|
15
|
+
require 'comable/core/configuration'
|
16
|
+
require 'comable/core/engine'
|
17
|
+
|
18
|
+
require 'comable/payment_provider'
|
19
|
+
require 'comable/state_machine_patch'
|
20
|
+
require 'comable/deprecator'
|
21
|
+
|
22
|
+
require 'comma_extractor_extentions'
|
23
|
+
|
24
|
+
module Comable
|
25
|
+
class << self
|
26
|
+
def setup(&_)
|
27
|
+
yield Comable::Config
|
28
|
+
end
|
29
|
+
|
30
|
+
def translate(key, options = {})
|
31
|
+
I18n.translate("comable.#{key}", options)
|
32
|
+
end
|
33
|
+
|
34
|
+
alias_method :t, :translate
|
35
|
+
|
36
|
+
def app_name
|
37
|
+
'Comable'
|
38
|
+
end
|
39
|
+
|
40
|
+
def homepage
|
41
|
+
'https://github.com/appirits/comable#comable'
|
42
|
+
end
|
43
|
+
|
44
|
+
def license
|
45
|
+
'https://github.com/appirits/comable/blob/master/MIT-LICENSE'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Comable
|
2
|
+
module Core
|
3
|
+
module Configuration
|
4
|
+
mattr_accessor :devise_strategies
|
5
|
+
@@devise_strategies = {
|
6
|
+
user: [:database_authenticatable, :registerable, :recoverable, :rememberable, :trackable]
|
7
|
+
}
|
8
|
+
|
9
|
+
mattr_accessor :products_per_page
|
10
|
+
@@products_per_page = 15
|
11
|
+
|
12
|
+
mattr_accessor :orders_per_page
|
13
|
+
@@orders_per_page = 5
|
14
|
+
|
15
|
+
mattr_accessor :export_xlsx_header_style
|
16
|
+
@@export_xlsx_header_style = { bg_color: '00000000', fg_color: 'ffffffff', alignment: { horizontal: :center }, bold: true }
|
17
|
+
|
18
|
+
mattr_accessor :export_xlsx_style
|
19
|
+
@@export_xlsx_style = nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Comable
|
2
|
+
module Core
|
3
|
+
class Engine < ::Rails::Engine
|
4
|
+
isolate_namespace Comable
|
5
|
+
|
6
|
+
config.generators do |g|
|
7
|
+
g.test_framework :rspec, fixture: true
|
8
|
+
g.fixture_replacement :factory_girl, dir: 'spec/factories'
|
9
|
+
end
|
10
|
+
|
11
|
+
config.autoload_paths << "#{config.root}/app/models/concerns" if Rails::VERSION::MAJOR == 3
|
12
|
+
|
13
|
+
initializer 'comable.congiguration', before: :load_config_initializers do |app|
|
14
|
+
app.config.comable = Comable::Core::Configuration
|
15
|
+
Comable::Config = app.config.comable
|
16
|
+
end
|
17
|
+
|
18
|
+
# refs: https://github.com/plataformatec/devise/wiki/How-To:-Use-devise-inside-a-mountable-engine
|
19
|
+
initializer 'comable.devise.setup', before: :load_config_initializers do
|
20
|
+
Devise.setup do |config|
|
21
|
+
config.mailer_sender = 'comable@example.com'
|
22
|
+
|
23
|
+
require 'devise/orm/active_record'
|
24
|
+
|
25
|
+
config.case_insensitive_keys = [:email]
|
26
|
+
config.strip_whitespace_keys = [:email]
|
27
|
+
config.skip_session_storage = [:http_auth]
|
28
|
+
config.stretches = Rails.env.test? ? 1 : 10
|
29
|
+
config.reconfirmable = true
|
30
|
+
config.password_length = 8..128
|
31
|
+
config.reset_password_within = 6.hours
|
32
|
+
config.sign_out_via = :delete
|
33
|
+
|
34
|
+
# ==> Mountable engine configurations
|
35
|
+
config.router_name = :comable
|
36
|
+
config.parent_controller = 'Comable::ApplicationController'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
initializer 'comable.devise.warden.manager' do
|
41
|
+
Warden::Manager.after_set_user except: :fetch do |record, warden, options|
|
42
|
+
if record.respond_to?(:after_set_user) && warden.authenticated?(options[:scope])
|
43
|
+
record.with_cookies(warden.cookies)
|
44
|
+
record.after_set_user
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
if Rails::VERSION::MAJOR > 3
|
2
|
+
module Comable
|
3
|
+
class Deprecator < ActiveSupport::Deprecation
|
4
|
+
def initialize(deprecation_horizon = '0.4.0', gem_name = 'Comable')
|
5
|
+
super
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
else
|
10
|
+
# TODO: Deprecated itself!
|
11
|
+
module Comable
|
12
|
+
class Deprecator
|
13
|
+
include Singleton
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Module
|
18
|
+
def deprecate_with_deprecator(*method_names)
|
19
|
+
options = method_names.extract_options!
|
20
|
+
options.delete(:deprecator) if options.present?
|
21
|
+
deprecate_without_deprecator
|
22
|
+
end
|
23
|
+
|
24
|
+
alias_method_chain :deprecate, :deprecator
|
25
|
+
end
|
26
|
+
end
|