├── log
└── .keep
├── app
├── jobs
│ └── .keep
├── views
│ ├── serve
│ │ ├── admin
│ │ │ ├── home
│ │ │ │ └── index.html.erb
│ │ │ ├── services
│ │ │ │ ├── update_card.turbo_stream.erb
│ │ │ │ ├── update_wallet.turbo_stream.erb
│ │ │ │ ├── card.html.erb
│ │ │ │ ├── wallet.html.erb
│ │ │ │ ├── _form.html.erb
│ │ │ │ ├── _index
│ │ │ │ │ ├── _index_thead.html.erb
│ │ │ │ │ ├── _index_tr.html.erb
│ │ │ │ │ └── _index_tbody.html.erb
│ │ │ │ ├── _show_table.html.erb
│ │ │ │ ├── _card_form.html.erb
│ │ │ │ └── _wallet_form.html.erb
│ │ │ ├── servers
│ │ │ │ ├── _form.html.erb
│ │ │ │ ├── _index
│ │ │ │ │ ├── _index_thead.html.erb
│ │ │ │ │ ├── _index_tbody.html.erb
│ │ │ │ │ └── _breadcrumb.html.erb
│ │ │ │ └── _show_table.html.erb
│ │ │ └── base
│ │ │ │ └── _nav.html.erb
│ │ ├── me
│ │ │ └── servings
│ │ │ │ ├── _index
│ │ │ │ └── _index_tbody.html.erb
│ │ │ │ ├── _qrcode
│ │ │ │ ├── _tab_bar_footer.html.erb
│ │ │ │ ├── _package.html.erb
│ │ │ │ ├── _packages.html.erb
│ │ │ │ ├── _buttons.html.erb
│ │ │ │ └── _serving.html.erb
│ │ │ │ ├── finish.turbo_stream.erb
│ │ │ │ ├── start.turbo_stream.erb
│ │ │ │ ├── qrcode.html.erb
│ │ │ │ └── index.html+phone.erb
│ │ ├── my
│ │ │ └── servings
│ │ │ │ ├── index.html+phone.erb
│ │ │ │ └── _index
│ │ │ │ ├── _top_bar.html+phone.erb
│ │ │ │ ├── _serving.html+phone.erb
│ │ │ │ └── _serving_preview.html.erb
│ │ └── services
│ │ │ ├── _index
│ │ │ ├── _index_table.html+phone.erb
│ │ │ ├── _index_tr.html+phone.erb
│ │ │ └── _index_tbody.html+phone.erb
│ │ │ ├── index.html+phone.erb
│ │ │ └── _base
│ │ │ ├── _tab_bar_footer.html.erb
│ │ │ └── _cart.html.erb
│ ├── me
│ │ ├── _serve_nav.html.erb
│ │ └── _serve_nav.html+phone.erb
│ └── admin
│ │ └── _serve_nav.html.erb
├── controllers
│ └── serve
│ │ ├── base_controller.rb
│ │ ├── me
│ │ ├── base_controller.rb
│ │ └── servings_controller.rb
│ │ ├── my
│ │ ├── base_controller.rb
│ │ └── servings_controller.rb
│ │ ├── admin
│ │ ├── base_controller.rb
│ │ ├── home_controller.rb
│ │ ├── servers_controller.rb
│ │ └── services_controller.rb
│ │ ├── servers_controller.rb
│ │ ├── services_controller.rb
│ │ └── servings_controller.rb
└── models
│ ├── serve
│ ├── server.rb
│ ├── serving.rb
│ ├── service.rb
│ ├── ext
│ │ ├── item.rb
│ │ └── member.rb
│ └── model
│ │ ├── server.rb
│ │ ├── service.rb
│ │ └── serving.rb
│ └── serve.rb
├── test
├── helpers
│ └── .keep
├── mailers
│ └── .keep
├── models
│ └── .keep
├── controllers
│ ├── .keep
│ └── serve
│ │ └── admin
│ │ ├── servers_controller_test.rb
│ │ └── services_controller_test.rb
├── integration
│ ├── .keep
│ └── navigation_test.rb
├── fixtures
│ └── files
│ │ └── .keep
├── rails_serve_test.rb
├── test_helper.rb
└── system
│ └── serve
│ └── admin
│ ├── servers_test.rb
│ └── services_test.rb
├── lib
├── rails_serve.rb
└── rails_serve
│ └── engine.rb
├── .gitignore
├── config
├── locales
│ ├── zh.attributes.yml
│ └── zh.controller.yml
└── routes.rb
├── .gitmodules
├── Rakefile
├── bin
└── rails
├── Gemfile
├── README.md
├── package.gemspec
├── LICENSE
└── Gemfile.lock
/log/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/jobs/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/helpers/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/mailers/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/models/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/controllers/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/integration/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/fixtures/files/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/views/serve/admin/home/index.html.erb:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/rails_serve.rb:
--------------------------------------------------------------------------------
1 | require 'rails_serve/engine'
2 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/update_card.turbo_stream.erb:
--------------------------------------------------------------------------------
1 | <%= turbo_stream.append 'body', partial: 'visit' %>
2 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/update_wallet.turbo_stream.erb:
--------------------------------------------------------------------------------
1 | <%= turbo_stream.append 'body', partial: 'visit' %>
2 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/_index/_index_tbody.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= model.service.name %>
3 |
4 |
--------------------------------------------------------------------------------
/app/controllers/serve/base_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class BaseController < ApplicationController
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/controllers/serve/me/base_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Me::BaseController < MeController
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/controllers/serve/my/base_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class My::BaseController < MyController
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/_qrcode/_tab_bar_footer.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= render 'buttons' %>
3 |
4 |
--------------------------------------------------------------------------------
/app/controllers/serve/admin/base_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Admin::BaseController < AdminController
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/models/serve/server.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Server < ApplicationRecord
3 | include Model::Server
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/models/serve/serving.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Serving < ApplicationRecord
3 | include Model::Serving
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/views/serve/admin/servers/_form.html.erb:
--------------------------------------------------------------------------------
1 | <%= f.text_field :name %>
2 | <%= f.collection_select :member_id, @members, :id, :name %>
3 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/card.html.erb:
--------------------------------------------------------------------------------
1 | <%= turbo_frame_tagged 'modal' do %>
2 | <%= render partial: 'card_form' %>
3 | <% end %>
4 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/wallet.html.erb:
--------------------------------------------------------------------------------
1 | <%= turbo_frame_tagged 'modal' do %>
2 | <%= render partial: 'wallet_form' %>
3 | <% end %>
4 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/finish.turbo_stream.erb:
--------------------------------------------------------------------------------
1 | <%= turbo_stream.append 'body' do %>
2 |
3 | <% end %>
4 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/start.turbo_stream.erb:
--------------------------------------------------------------------------------
1 | <%= turbo_stream.append 'body' do %>
2 |
3 | <% end %>
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .bundle/
2 | docs/
3 | db/
4 | node_modules/
5 | log/*.log
6 | tmp/**/*.*
7 | !tmp/.keep
8 | !tmp/sockets/.keep
9 |
10 | *.gem
11 |
--------------------------------------------------------------------------------
/app/views/serve/admin/base/_nav.html.erb:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/app/models/serve/service.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Service < ApplicationRecord
3 | include Trade::Ext::Good
4 | include Model::Service
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/_form.html.erb:
--------------------------------------------------------------------------------
1 | <%= f.text_field :name %>
2 | <%= f.number_field :price %>
3 | <%= f.text_field :unit %>
4 | <%= f.file_field :logo %>
5 |
--------------------------------------------------------------------------------
/app/controllers/serve/admin/home_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Admin::HomeController < Admin::BaseController
3 |
4 | def index
5 | end
6 |
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/config/locales/zh.attributes.yml:
--------------------------------------------------------------------------------
1 | zh:
2 | activerecord:
3 | attributes:
4 | serve/service:
5 | price: 价格
6 | serve/serving:
7 | member_id: 服务技师
8 |
--------------------------------------------------------------------------------
/app/views/serve/admin/servers/_index/_index_thead.html.erb:
--------------------------------------------------------------------------------
1 | <%= Serve::Server.human_attribute_name(:name) %>
2 | <%= Serve::Server.human_attribute_name(:member_id) %>
3 |
--------------------------------------------------------------------------------
/app/models/serve.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 |
3 | def self.use_relative_model_naming?
4 | true
5 | end
6 |
7 | def self.table_name_prefix
8 | 'serve_'
9 | end
10 |
11 | end
12 |
--------------------------------------------------------------------------------
/test/integration/navigation_test.rb:
--------------------------------------------------------------------------------
1 | require "test_helper"
2 |
3 | class NavigationTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/rails_serve_test.rb:
--------------------------------------------------------------------------------
1 | require "test_helper"
2 |
3 | class RailsServeTest < ActiveSupport::TestCase
4 | test "it has a version number" do
5 | assert RailsServe::VERSION
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "docker"]
2 | path = docker
3 | url = git@github.com:work-design/docker.git
4 | [submodule "test/dummy"]
5 | path = test/dummy
6 | url = https://github.com/work-design/dummy.git
7 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/qrcode.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
物流箱
3 |
4 | <%= render 'serving' %>
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | require "bundler/setup"
2 |
3 | APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4 | load "rails/tasks/engine.rake"
5 |
6 | load "rails/tasks/statistics.rake"
7 |
8 | require "bundler/gem_tasks"
9 |
--------------------------------------------------------------------------------
/app/models/serve/ext/item.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | module Ext::Item
3 | extend ActiveSupport::Concern
4 |
5 | included do
6 | has_many :servings, class_name: 'Serve::Serving'
7 | end
8 |
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/app/models/serve/ext/member.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | module Ext::Member
3 | extend ActiveSupport::Concern
4 |
5 | included do
6 | has_many :servings, class_name: 'Serve::Serving'
7 | end
8 |
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/app/views/serve/my/servings/index.html+phone.erb:
--------------------------------------------------------------------------------
1 | <%= render 'top_bar' %>
2 |
3 |
4 |
5 | <%= render partial: 'serving', collection: @servings, as: :serving %>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/views/serve/services/_index/_index_table.html+phone.erb:
--------------------------------------------------------------------------------
1 |
2 |
<%= t('.title') %>
3 |
4 | <%= yield %>
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/controllers/serve/servers_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class ServersController < BaseController
3 | before_action :set_service
4 |
5 | private
6 | def set_service
7 | @service = Service.find params[:service_id]
8 | end
9 |
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/views/serve/services/index.html+phone.erb:
--------------------------------------------------------------------------------
1 | <%= render 'top_bar' %>
2 | <%= render 'filter_form' %>
3 | <%= render 'filter_table' %>
4 |
5 | <%= render layout: 'index_table' do %>
6 | <%= render partial: 'index_tbody', layout: 'index_tr', collection: @services, as: :model %>
7 | <% end %>
8 |
--------------------------------------------------------------------------------
/app/views/serve/admin/servers/_index/_index_tbody.html.erb:
--------------------------------------------------------------------------------
1 | <%= model.name %>
2 |
3 |
4 | <%= image_tag model.member.avatar, class: 'image is-24x24' if model.member.avatar.attached? %>
5 | <%= model.member.name %>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/_qrcode/_package.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= model.id %>
5 |
6 | <%= model.boxed_in_at.to_fs(:iso8601) %>
7 |
8 |
--------------------------------------------------------------------------------
/app/models/serve/model/server.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | module Model::Server
3 | extend ActiveSupport::Concern
4 |
5 | included do
6 | attribute :name, :string
7 |
8 | belongs_to :service
9 | belongs_to :member, class_name: 'Org::Member'
10 | end
11 |
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/rails_serve/engine.rb:
--------------------------------------------------------------------------------
1 | require 'rails_com'
2 | module RailsServe
3 | class Engine < ::Rails::Engine
4 | config.generators do |g|
5 | g.helper false
6 | g.resource_route false
7 | g.templates.unshift File.expand_path('lib/templates', RailsCom::Engine.root)
8 | end
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/app/views/serve/services/_index/_index_tr.html+phone.erb:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/app/views/serve/services/_index/_index_tbody.html+phone.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= image_tag model.logo, class: 'image is-24x24' if model.logo.attached? %>
3 | <%= model.name %>
4 |
5 |
6 | <%= model.price.to_money.format(html_wrap: true).html_safe %>
7 |
8 |
--------------------------------------------------------------------------------
/app/views/serve/admin/servers/_show_table.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= Serve::Server.human_attribute_name(:name) %>
3 | <%= @server.name %>
4 |
5 |
6 | <%= Serve::Server.human_attribute_name(:member_id) %>
7 | <%= @server.member_id %>
8 |
9 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/index.html+phone.erb:
--------------------------------------------------------------------------------
1 | <%= render 'top_bar' %>
2 | <%= render 'filter_form' %>
3 | <%= render 'filter_table' %>
4 |
5 | <%= render layout: 'index_table' do %>
6 | <%= render partial: 'index_tbody', layout: 'index_tr', collection: @servings, as: :model %>
7 | <% end %>
8 |
9 | <%= paginate @servings %>
10 |
--------------------------------------------------------------------------------
/app/views/serve/admin/servers/_index/_breadcrumb.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <%= link_to t('serve.admin.services.index.title'), { controller: 'services' } %>
4 | <%= @service.name %>
5 | <%= t('.title') %>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/controllers/serve/my/servings_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class My::ServingsController < My::BaseController
3 | before_action :set_item
4 |
5 | def index
6 | @servings = @item.servings
7 | end
8 |
9 | private
10 | def set_item
11 | @item = Trade::Item.find params[:item_id]
12 | end
13 |
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/_index/_index_thead.html.erb:
--------------------------------------------------------------------------------
1 | <%= Serve::Service.human_attribute_name(:name) %>
2 | <%= Serve::Service.human_attribute_name(:price) %>
3 | <%= Serve::Service.human_attribute_name(:card_price) %>
4 | <%= Serve::Service.human_attribute_name(:wallet_price) %>
5 | <%= Serve::Service.human_attribute_name(:unit) %>
6 |
--------------------------------------------------------------------------------
/app/controllers/serve/services_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class ServicesController < BaseController
3 | before_action :set_cart
4 |
5 | def index
6 | @services = Service.default_where(default_params)
7 | end
8 |
9 | def set_cart
10 | @cart = current_carts.find_or_create_by(good_type: 'Serve::Service', aim: 'use')
11 | end
12 |
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/_qrcode/_packages.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= Ship::Package.human_attribute_name(:id) %>
5 | <%= Ship::Package.human_attribute_name(:boxed_in_at) %>
6 |
7 |
8 | <%= render partial: 'package', collection: @box.packages, as: :model %>
9 |
10 |
--------------------------------------------------------------------------------
/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | ENGINE_ROOT = File.expand_path('..', __dir__)
4 | ENGINE_PATH = File.expand_path('../lib/rails_serve/engine', __dir__)
5 | APP_PATH = File.expand_path('../test/dummy/config/application', __dir__)
6 |
7 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
8 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
9 |
10 | require 'rails/all'
11 | require 'rails/engine/commands'
12 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/_qrcode/_buttons.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <% if @serving.start_at.blank? %>
4 | <%= button_to({ action: 'start' }, method: :patch, class: 'button is-warning') do %>
5 | 开始服务
6 | <% end %>
7 | <% end %>
8 | <%= button_to({ action: 'finish' }, method: :patch, class: 'button is-danger') do %>
9 | 结束服务
10 | <% end %>
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 | git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3 | gemspec
4 |
5 | gem 'rails'
6 | gem 'pg'
7 | gem 'propshaft'
8 |
9 | gem 'rails_extend', github: 'work-design/rails_extend'
10 | gem 'rails_com', github: 'work-design/rails_com'
11 | gem 'rails_design', github: 'work-design/rails_design'
12 | gem 'rails_org', github: 'work-design/rails_org'
13 |
14 | gem 'amazing_print'
15 | group :development, :test do
16 | gem 'debug'
17 | gem 'sdoc'
18 | end
19 |
--------------------------------------------------------------------------------
/app/views/serve/my/servings/_index/_top_bar.html+phone.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <%= link_to({ controller: 'trade/my/orders', action: 'show', id: @item.order_id }, class: 'px-4') do %>
4 |
5 | <% end %>
6 |
<%= t('.title') %>
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/views/serve/my/servings/_index/_serving.html+phone.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= serving.item.good.name %>
3 |
4 |
5 | <% unless serving.member %>
6 |
7 | <%= image_tag serving.qrcode_enter_url %>
8 | 出示二维码核销
9 |
10 | <% end %>
11 |
12 | <%= render partial: 'serving_preview', locals: { serving: serving } %>
13 | <%= turbo_stream_from serving %>
14 |
--------------------------------------------------------------------------------
/app/views/me/_serve_nav.html.erb:
--------------------------------------------------------------------------------
1 |
8 |
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RailsServe
2 | Short description and motivation.
3 |
4 | ## Usage
5 | How to use my plugin.
6 |
7 | ## Installation
8 | Add this line to your application's Gemfile:
9 |
10 | ```ruby
11 | gem "rails_serve"
12 | ```
13 |
14 | And then execute:
15 | ```bash
16 | $ bundle
17 | ```
18 |
19 | Or install it yourself as:
20 | ```bash
21 | $ gem install rails_serve
22 | ```
23 |
24 | ## Contributing
25 | Contribution directions go here.
26 |
27 | ## License
28 | The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
29 |
--------------------------------------------------------------------------------
/app/controllers/serve/servings_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class ServingsController < BaseController
3 | before_action :require_login
4 | before_action :set_serving, only: [:qrcode]
5 |
6 | def qrcode
7 | if current_user.organ_ids.include?(@serving.service.organ_id)
8 | redirect_to({ controller: 'serve/me/servings', action: 'qrcode', id: params[:id], host: @serving.service.organ.host }, allow_other_host: true)
9 | end
10 | end
11 |
12 | private
13 | def set_serving
14 | @serving = Serving.find params[:id]
15 | end
16 |
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/app/models/serve/model/service.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | module Model::Service
3 | extend ActiveSupport::Concern
4 |
5 | included do
6 | attribute :name, :string
7 |
8 | belongs_to :organ, class_name: 'Org::Organ', optional: true
9 |
10 | has_many :servers, dependent: :destroy
11 | has_many :members, through: :servers
12 | has_many :servings
13 | end
14 |
15 | def order_paid(item)
16 | rest = item.number - item.servings.count
17 | rest.times do
18 | servings.build(item_id: item.id)
19 | end
20 | save
21 | end
22 |
23 | end
24 | end
25 |
--------------------------------------------------------------------------------
/package.gemspec:
--------------------------------------------------------------------------------
1 | Gem::Specification.new do |s|
2 | s.name = 'rails_serve'
3 | s.version = '0.0.1'
4 | s.authors = ['qinmingyuan']
5 | s.email = ['mingyuan0715@foxmail.com']
6 | s.homepage = 'https://github.com/work-design/rails_serve'
7 | s.summary = 'Summary of RailsServe.'
8 | s.description = 'Description of RailsServe.'
9 | s.license = 'MIT'
10 |
11 | s.files = Dir.chdir(File.expand_path(__dir__)) do
12 | Dir[
13 | '{app,config,db,lib}/**/*',
14 | 'LICENSE',
15 | 'Rakefile',
16 | 'README.md'
17 | ]
18 | end
19 |
20 | s.add_dependency 'rails', '>= 7.0.3.1'
21 | end
22 |
--------------------------------------------------------------------------------
/config/locales/zh.controller.yml:
--------------------------------------------------------------------------------
1 | zh:
2 | serve:
3 | title: 服务
4 | services:
5 | index:
6 | title: 服务项目
7 | my:
8 | servings:
9 | index:
10 | title: 服务
11 | me:
12 | title: 我的服务
13 | servings:
14 | index:
15 | title: 我的服务
16 | admin:
17 | title: 服务管理
18 | home:
19 | index:
20 | title: 服务管理
21 | services:
22 | index:
23 | title: 服务项目
24 | wallet:
25 | title: 钱包支付
26 | card:
27 | title: 会员价
28 | servers:
29 | index:
30 | title: 服务人员
31 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/_show_table.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= Serve::Service.human_attribute_name(:name) %>
3 | <%= @service.name %>
4 |
5 |
6 | <%= Serve::Service.human_attribute_name(:price) %>
7 | <%= @service.price %>
8 |
9 |
10 | <%= Serve::Service.human_attribute_name(:card_price) %>
11 | <%= @service.card_price %>
12 |
13 |
14 | <%= Serve::Service.human_attribute_name(:unit) %>
15 | <%= @service.unit %>
16 |
17 |
--------------------------------------------------------------------------------
/app/views/admin/_serve_nav.html.erb:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/test/test_helper.rb:
--------------------------------------------------------------------------------
1 | # Configure Rails Environment
2 | ENV["RAILS_ENV"] = "test"
3 |
4 | require_relative "../test/dummy/config/environment"
5 | ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)]
6 | require "rails/test_help"
7 |
8 | # Load fixtures from the engine
9 | if ActiveSupport::TestCase.respond_to?(:fixture_path=)
10 | ActiveSupport::TestCase.fixture_path = File.expand_path("fixtures", __dir__)
11 | ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
12 | ActiveSupport::TestCase.file_fixture_path = ActiveSupport::TestCase.fixture_path + "/files"
13 | ActiveSupport::TestCase.fixtures :all
14 | end
15 |
--------------------------------------------------------------------------------
/app/controllers/serve/me/servings_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Me::ServingsController < Me::BaseController
3 | before_action :set_serving, only: [:qrcode, :start, :finish]
4 |
5 | def index
6 | @servings = current_member.servings.page(params[:page])
7 | end
8 |
9 | def qrcode
10 |
11 | end
12 |
13 | def start
14 | @serving.member = current_member
15 | @serving.start_at = Time.current
16 | @serving.save
17 | end
18 |
19 | def finish
20 | @serving.finish_at = Time.current
21 | @serving.save
22 | end
23 |
24 | private
25 | def set_serving
26 | @serving = Serving.find params[:id]
27 | end
28 |
29 | end
30 | end
31 |
--------------------------------------------------------------------------------
/app/views/me/_serve_nav.html+phone.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= t('serve.me.title') %>
5 |
6 |
7 |
8 | <%= link_to({ controller: 'serve/me/servings' }, class: 'column has-block-centered') do %>
9 |
10 |
11 |
12 |
<%= t('serve.me.servings.index.title') %>
13 | <% end %>
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/controllers/serve/admin/servers_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Admin::ServersController < Admin::BaseController
3 | before_action :set_service
4 | before_action :set_new_server, only: [:new, :create]
5 | before_action :set_members, only: [:new, :create, :edit, :update]
6 |
7 | private
8 | def set_service
9 | @service = Service.find params[:service_id]
10 | end
11 |
12 | def set_new_server
13 | @server = @service.servers.build(server_params)
14 | end
15 |
16 | def set_members
17 | @members = Org::Member.default_where(default_params)
18 | end
19 |
20 | def server_params
21 | params.fetch(:server, {}).permit(
22 | :name,
23 | :member_id
24 | )
25 | end
26 |
27 | end
28 | end
29 |
--------------------------------------------------------------------------------
/app/views/serve/services/_base/_tab_bar_footer.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <%= link_to({ controller: 'trade/my/carts', action: 'show', id: @cart.id }, class: 'level-item mb-0') do %>
4 |
5 | <%= @cart.items.count %>
6 |
7 | <% end %>
8 |
9 | <%= @cart.item_amount.to_money.format(html_wrap: true).html_safe %>
10 |
11 |
12 |
13 |
14 | <%= link_to({ controller: 'trade/my/carts', action: 'show', id: @cart.id }, class: 'weui-btn weui-btn_mini weui-btn_primary') do %>
15 | 去购物车
16 |
17 | <% end %>
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2022-Present Mingyuan Qin
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/app/views/serve/my/servings/_index/_serving_preview.html.erb:
--------------------------------------------------------------------------------
1 |
23 |
--------------------------------------------------------------------------------
/config/routes.rb:
--------------------------------------------------------------------------------
1 | Rails.application.routes.draw do
2 | scope RailsCom.default_routes_scope do
3 | namespace :serve, defaults: { business: 'serve' } do
4 | resources :services do
5 | resources :servers
6 | end
7 | resources :servings do
8 | member do
9 | get :qrcode
10 | end
11 | end
12 | namespace :admin, defaults: { namespace: 'admin' } do
13 | root 'home#index'
14 | resources :services do
15 | member do
16 | get :wallet
17 | patch :update_wallet
18 | get :card
19 | patch :update_card
20 | end
21 | resources :servers
22 | end
23 | end
24 | namespace :my, defaults: { namespace: 'my' } do
25 | resources :items, only: [] do
26 | resources :servings
27 | end
28 | end
29 | namespace :me, defaults: { namespace: 'me' } do
30 | resources :servings do
31 | member do
32 | get :qrcode
33 | patch :start
34 | patch :finish
35 | end
36 | end
37 | end
38 | end
39 | end
40 | resolve 'Serve::Service' do |service, options|
41 | [:serve, service, options]
42 | end
43 | end
44 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/_card_form.html.erb:
--------------------------------------------------------------------------------
1 | <%= form_with model: @service, url: { action: 'update_card' } do |f| %>
2 | <%= render 'error_messages', target: f.object %>
3 | <% @card_templates.each do |card_template| %>
4 | <%= f.fields :card_price, all: { normal: nil }, wrap: { input: 'field' } do |ef| %>
5 |
6 |
<%= card_template.name %>
7 |
8 | <%= ef.hidden_field :code, value: card_template.code, index: card_template.id, disabled: !@service.card_price.key?(card_template.code) %>
9 | <%= ef.number_field :price, step: 0.01, value: @service.card_price.fetch(card_template.code, @service.price), index: card_template.id, disabled: !@service.card_price.key?(card_template.code) %>
10 |
11 |
12 |
13 |
14 |
15 |
16 | <% end %>
17 | <% end %>
18 | <%= f.submit %>
19 | <% end %>
20 |
--------------------------------------------------------------------------------
/app/controllers/serve/admin/services_controller.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | class Admin::ServicesController < Admin::BaseController
3 | before_action :set_service, only: [
4 | :show, :edit, :update, :destroy, :actions,
5 | :wallet, :update_wallet, :card, :update_card
6 | ]
7 |
8 | def wallet
9 | @wallet_templates = Trade::WalletTemplate.default_where(default_params)
10 | end
11 |
12 | def update_wallet
13 | @service.wallet_price = wallet_price_params
14 | @service.save
15 | end
16 |
17 | def card
18 | @card_templates = Trade::CardTemplate.default_where(default_params)
19 | end
20 |
21 | def update_card
22 | @service.card_price = card_price_params
23 | @service.save
24 | end
25 |
26 | private
27 | def set_service
28 | @service = Service.find params[:id]
29 | end
30 |
31 | def wallet_price_params
32 | r = {}
33 |
34 | params.fetch(:service, {}).fetch(:wallet_price, {}).each do |_, v|
35 | r.merge! v[:code] => v[:price]
36 | end
37 |
38 | r
39 | end
40 |
41 | def card_price_params
42 | r = {}
43 |
44 | params.dig(:service, :card_price).each do |_, v|
45 | r.merge! v[:code] => v[:price]
46 | end
47 |
48 | r
49 | end
50 | end
51 | end
52 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/_index/_index_tr.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= yield %>
3 |
4 |
5 | <%= link_to({ controller: 'servers', service_id: model.id }, aria: { label: t('serve.admin.servers.index.title') }, class: 'button is-small is-rounded is-light') do %>
6 |
7 | <% end %>
8 | <%= link_to({ action: 'show', id: model.id }, data: { turbo_frame: 'modal' }, aria: { label: t('.show') }, class: 'button is-small is-rounded is-light') do %>
9 |
10 | <% end %>
11 | <%= link_to({ action: 'edit', id: model.id }, data: { turbo_frame: 'modal', turbo_scroll: true }, aria: { label: t('.edit') }, class: 'button is-small is-rounded is-light') do %>
12 |
13 | <% end %>
14 | <%= button_to({ action: 'destroy', id: model.id }, method: :delete, aria: { label: t('.destroy') }, class: 'button is-small is-rounded is-light', form: { data: { turbo_confirm: t('.confirm'), turbo_scroll: true } }) do %>
15 |
16 | <% end %>
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/test/system/serve/admin/servers_test.rb:
--------------------------------------------------------------------------------
1 | require "application_system_test_case"
2 |
3 | class ServersTest < ApplicationSystemTestCase
4 | setup do
5 | @serve_admin_server = serve_admin_servers(:one)
6 | end
7 |
8 | test "visiting the index" do
9 | visit serve_admin_servers_url
10 | assert_selector "h1", text: "Servers"
11 | end
12 |
13 | test "should create server" do
14 | visit serve_admin_servers_url
15 | click_on "New server"
16 |
17 | fill_in "Member", with: @serve_admin_server.member_id
18 | fill_in "Name", with: @serve_admin_server.name
19 | click_on "Create Server"
20 |
21 | assert_text "Server was successfully created"
22 | click_on "Back"
23 | end
24 |
25 | test "should update Server" do
26 | visit serve_admin_server_url(@serve_admin_server)
27 | click_on "Edit this server", match: :first
28 |
29 | fill_in "Member", with: @serve_admin_server.member_id
30 | fill_in "Name", with: @serve_admin_server.name
31 | click_on "Update Server"
32 |
33 | assert_text "Server was successfully updated"
34 | click_on "Back"
35 | end
36 |
37 | test "should destroy Server" do
38 | visit serve_admin_server_url(@serve_admin_server)
39 | click_on "Destroy this server", match: :first
40 |
41 | assert_text "Server was successfully destroyed"
42 | end
43 | end
44 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/_wallet_form.html.erb:
--------------------------------------------------------------------------------
1 | <%= form_with model: @service, url: { action: 'update_wallet' } do |f| %>
2 | <%= render 'error_messages', target: f.object %>
3 | <% @wallet_templates.each do |wallet_template| %>
4 | <%= f.fields :wallet_price, all: { normal: nil }, wrap: { input: 'field' } do |ef| %>
5 |
6 |
<%= wallet_template.name %>
7 |
8 | <%= ef.hidden_field :code, value: wallet_template.code, index: wallet_template.id, disabled: !@service.wallet_price.key?(wallet_template.code) %>
9 | <%= ef.number_field :price, step: wallet_template.step, value: @service.wallet_price.fetch(wallet_template.code, wallet_template.step), index: wallet_template.id, disabled: !@service.wallet_price.key?(wallet_template.code) %>
10 |
11 | <%= wallet_template.unit %>
12 |
13 |
14 |
15 |
16 |
17 | <% end %>
18 | <% end %>
19 | <%= f.submit %>
20 | <% end %>
21 |
--------------------------------------------------------------------------------
/app/models/serve/model/serving.rb:
--------------------------------------------------------------------------------
1 | module Serve
2 | module Model::Serving
3 | extend ActiveSupport::Concern
4 |
5 | included do
6 | attribute :start_at, :datetime
7 | attribute :finish_at, :datetime
8 | attribute :estimate_finish_at, :datetime
9 |
10 | belongs_to :service
11 | belongs_to :server, optional: true
12 | belongs_to :member, class_name: 'Org::Member', optional: true
13 | belongs_to :wallet_payment, class_name: 'Trade::WalletPayment', optional: true
14 | belongs_to :item, class_name: 'Trade::Item'
15 |
16 | after_save_commit :send_notice, if: -> { (saved_changes.keys & ['member_id', 'start_at', 'finish_at']).present? }
17 | end
18 |
19 | def sync_from
20 |
21 | end
22 |
23 | def enter_url
24 | Rails.application.routes.url_for(controller: 'serve/servings', action: 'qrcode', id: self.id, host: item.organ.host)
25 | end
26 |
27 | def qrcode_enter_png
28 | QrcodeHelper.code_png(enter_url, border_modules: 0, fill: 'pink')
29 | end
30 |
31 | def qrcode_enter_url
32 | QrcodeHelper.data_url(enter_url)
33 | end
34 |
35 | def send_notice
36 | broadcast_action_to(
37 | self,
38 | action: :update,
39 | target: "serving_#{id}",
40 | partial: 'serve/my/servings/_index/serving_preview',
41 | locals: { model: self }
42 | )
43 | end
44 |
45 | end
46 | end
47 |
--------------------------------------------------------------------------------
/app/views/serve/admin/services/_index/_index_tbody.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <%= image_tag model.logo, class: 'image is-24x24' if model.logo.attached? %>
4 | <%= model.name %>
5 |
6 |
7 | <%= model.price %>
8 |
9 |
10 | <% model.card_price.each do |key, value| %>
11 |
15 | <% end %>
16 |
17 | <%= link_to({ action: 'card', id: model.id }, data: { turbo_frame: 'modal', show_target: 'item' }, aria: { label: t('serve.admin.services.card.title') }) do %>
18 |
19 | <% end %>
20 |
21 |
22 |
23 | <% model.wallet_price.each do |key, value| %>
24 |
30 | <% end %>
31 |
32 | <%= link_to({ action: 'wallet', id: model.id }, data: { turbo_frame: 'modal', show_target: 'item' }, aria: { label: t('serve.admin.services.wallet.title') }) do %>
33 |
34 | <% end %>
35 |
36 | <%= model.unit %>
37 |
--------------------------------------------------------------------------------
/test/system/serve/admin/services_test.rb:
--------------------------------------------------------------------------------
1 | require "application_system_test_case"
2 |
3 | class ServicesTest < ApplicationSystemTestCase
4 | setup do
5 | @serve_admin_service = serve_admin_services(:one)
6 | end
7 |
8 | test "visiting the index" do
9 | visit serve_admin_services_url
10 | assert_selector "h1", text: "Services"
11 | end
12 |
13 | test "should create service" do
14 | visit serve_admin_services_url
15 | click_on "New service"
16 |
17 | fill_in "Name", with: @serve_admin_service.name
18 | fill_in "Price", with: @serve_admin_service.price
19 | fill_in "Unit", with: @serve_admin_service.unit
20 | fill_in "Vip price", with: @serve_admin_service.vip_price
21 | click_on "Create Service"
22 |
23 | assert_text "Service was successfully created"
24 | click_on "Back"
25 | end
26 |
27 | test "should update Service" do
28 | visit serve_admin_service_url(@serve_admin_service)
29 | click_on "Edit this service", match: :first
30 |
31 | fill_in "Name", with: @serve_admin_service.name
32 | fill_in "Price", with: @serve_admin_service.price
33 | fill_in "Unit", with: @serve_admin_service.unit
34 | fill_in "Vip price", with: @serve_admin_service.vip_price
35 | click_on "Update Service"
36 |
37 | assert_text "Service was successfully updated"
38 | click_on "Back"
39 | end
40 |
41 | test "should destroy Service" do
42 | visit serve_admin_service_url(@serve_admin_service)
43 | click_on "Destroy this service", match: :first
44 |
45 | assert_text "Service was successfully destroyed"
46 | end
47 | end
48 |
--------------------------------------------------------------------------------
/app/views/serve/me/servings/_qrcode/_serving.html.erb:
--------------------------------------------------------------------------------
1 |
31 |
--------------------------------------------------------------------------------
/test/controllers/serve/admin/servers_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 | class Serve::Admin::ServersControllerTest < ActionDispatch::IntegrationTest
3 |
4 | setup do
5 | @server = servers(:one)
6 | end
7 |
8 | test 'index ok' do
9 | get url_for(controller: 'serve/admin/servers')
10 |
11 | assert_response :success
12 | end
13 |
14 | test 'new ok' do
15 | get url_for(controller: 'serve/admin/servers')
16 |
17 | assert_response :success
18 | end
19 |
20 | test 'create ok' do
21 | assert_difference('Server.count') do
22 | post(
23 | url_for(controller: 'serve/admin/servers', action: 'create'),
24 | params: { server: { member_id: @serve_admin_server.member_id, name: @serve_admin_server.name } },
25 | as: :turbo_stream
26 | )
27 | end
28 |
29 | assert_response :success
30 | end
31 |
32 | test 'show ok' do
33 | get url_for(controller: 'serve/admin/servers', action: 'show', id: @server.id)
34 |
35 | assert_response :success
36 | end
37 |
38 | test 'edit ok' do
39 | get url_for(controller: 'serve/admin/servers', action: 'edit', id: @server.id)
40 |
41 | assert_response :success
42 | end
43 |
44 | test 'update ok' do
45 | patch(
46 | url_for(controller: 'serve/admin/servers', action: 'update', id: @server.id),
47 | params: { server: { member_id: @serve_admin_server.member_id, name: @serve_admin_server.name } },
48 | as: :turbo_stream
49 | )
50 |
51 | assert_response :success
52 | end
53 |
54 | test 'destroy ok' do
55 | assert_difference('Server.count', -1) do
56 | delete url_for(controller: 'serve/admin/servers', action: 'destroy', id: @server.id), as: :turbo_stream
57 | end
58 |
59 | assert_response :success
60 | end
61 |
62 | end
63 |
--------------------------------------------------------------------------------
/test/controllers/serve/admin/services_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 | class Serve::Admin::ServicesControllerTest < ActionDispatch::IntegrationTest
3 |
4 | setup do
5 | @service = services(:one)
6 | end
7 |
8 | test 'index ok' do
9 | get url_for(controller: 'serve/admin/services')
10 |
11 | assert_response :success
12 | end
13 |
14 | test 'new ok' do
15 | get url_for(controller: 'serve/admin/services')
16 |
17 | assert_response :success
18 | end
19 |
20 | test 'create ok' do
21 | assert_difference('Service.count') do
22 | post(
23 | url_for(controller: 'serve/admin/services', action: 'create'),
24 | params: { service: { name: @serve_admin_service.name, price: @serve_admin_service.price, unit: @serve_admin_service.unit, vip_price: @serve_admin_service.vip_price } },
25 | as: :turbo_stream
26 | )
27 | end
28 |
29 | assert_response :success
30 | end
31 |
32 | test 'show ok' do
33 | get url_for(controller: 'serve/admin/services', action: 'show', id: @service.id)
34 |
35 | assert_response :success
36 | end
37 |
38 | test 'edit ok' do
39 | get url_for(controller: 'serve/admin/services', action: 'edit', id: @service.id)
40 |
41 | assert_response :success
42 | end
43 |
44 | test 'update ok' do
45 | patch(
46 | url_for(controller: 'serve/admin/services', action: 'update', id: @service.id),
47 | params: { service: { name: @serve_admin_service.name, price: @serve_admin_service.price, unit: @serve_admin_service.unit, vip_price: @serve_admin_service.vip_price } },
48 | as: :turbo_stream
49 | )
50 |
51 | assert_response :success
52 | end
53 |
54 | test 'destroy ok' do
55 | assert_difference('Service.count', -1) do
56 | delete url_for(controller: 'serve/admin/services', action: 'destroy', id: @service.id), as: :turbo_stream
57 | end
58 |
59 | assert_response :success
60 | end
61 |
62 | end
63 |
--------------------------------------------------------------------------------
/app/views/serve/services/_base/_cart.html.erb:
--------------------------------------------------------------------------------
1 | <% item = cart.find_item(good_id: model.id) %>
2 |
3 | <%= button_to({ controller: 'trade/my/items', action: 'update', id: item.id }, method: :patch, params: { '[item]number': item.number - 1 }, class: 'mr-1', form: { data: { turbo_scroll: true, turbo_scroll_container: 'production_body' } }) do %>
4 |
5 | <% end if item && item.number > 1 %>
6 | <%= button_to({ controller: 'trade/my/items', action: 'destroy', id: item.id }, method: :delete, class: 'mr-1', form: { data: { turbo_scroll: true, turbo_scroll_container: 'production_body' } }) do %>
7 |
8 | <% end if item && item.number <= 1 %>
9 | <%= form_with(theme: nil, scope: 'item', url: { controller: 'trade/my/items', action: 'update', id: item.id }, method: :patch, data: { controller: 'input', turbo_scroll: true, turbo_scroll_container: 'production_body' }) do |f| %>
10 | <%= f.number_field :number, value: item.number, data: { action: 'change->input#form' }, class: 'has-background-light has-text-centered', style: 'width: 30px' %>
11 | <% end if item %>
12 | <%= button_to({ controller: 'trade/my/items', action: 'update', id: item.id }, method: :patch, params: { '[item]number': item.number + 1 }, class: 'ml-1', form: { data: { turbo_scroll: true, turbo_scroll_container: 'production_body' } }) do %>
13 |
14 | <% end if item %>
15 |
16 | <%= form_with theme: nil, url: { controller: 'trade/my/items' }, data: { turbo_scroll: true, turbo_scroll_container: 'production_body' }, class: 'ml-1 button_to' do |f| %>
17 | <%= f.hidden_field :current_cart_id, value: cart.id %>
18 | <%= f.hidden_field :good_type, value: model.class_name %>
19 | <%= f.hidden_field :good_id, value: model.id %>
20 | <%= button_tag do %>
21 |
22 | <% end %>
23 | <% end unless item %>
24 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GIT
2 | remote: https://github.com/work-design/rails_com.git
3 | revision: d5dbbf2bf3f2339e02dbbe0574515f54645f06e7
4 | specs:
5 | rails_com (1.3.0)
6 | acme-client
7 | acts_as_list (>= 1.0)
8 | closure_tree (>= 7.3)
9 | default_where (~> 2.2)
10 | http-form_data (~> 2.3)
11 | httpx
12 | kaminari
13 | net-http
14 | rails (>= 7.0)
15 | rails_extend
16 | turbo-rails
17 |
18 | GIT
19 | remote: https://github.com/work-design/rails_design.git
20 | revision: 0c91c6d8e907da01b1af5cf4ce8bcd80b394f9be
21 | specs:
22 | rails_design (0.0.1)
23 | rails
24 |
25 | GIT
26 | remote: https://github.com/work-design/rails_extend.git
27 | revision: 3968d51ec1c68eaf846fd4e4238163a3d32f0c4f
28 | specs:
29 | rails_extend (1.0.1)
30 | rails (>= 5.0)
31 |
32 | GIT
33 | remote: https://github.com/work-design/rails_org.git
34 | revision: aa7a59af6f3bad28eb85b59a72a3b9a20f75a52b
35 | specs:
36 | rails_org (0.0.1)
37 | rails_com (~> 1.2)
38 |
39 | PATH
40 | remote: .
41 | specs:
42 | rails_serve (0.0.1)
43 | rails (>= 7.0.3.1)
44 |
45 | GEM
46 | remote: https://rubygems.org/
47 | specs:
48 | acme-client (2.0.11)
49 | faraday (>= 1.0, < 3.0.0)
50 | faraday-retry (~> 1.0)
51 | actioncable (7.0.3.1)
52 | actionpack (= 7.0.3.1)
53 | activesupport (= 7.0.3.1)
54 | nio4r (~> 2.0)
55 | websocket-driver (>= 0.6.1)
56 | actionmailbox (7.0.3.1)
57 | actionpack (= 7.0.3.1)
58 | activejob (= 7.0.3.1)
59 | activerecord (= 7.0.3.1)
60 | activestorage (= 7.0.3.1)
61 | activesupport (= 7.0.3.1)
62 | mail (>= 2.7.1)
63 | net-imap
64 | net-pop
65 | net-smtp
66 | actionmailer (7.0.3.1)
67 | actionpack (= 7.0.3.1)
68 | actionview (= 7.0.3.1)
69 | activejob (= 7.0.3.1)
70 | activesupport (= 7.0.3.1)
71 | mail (~> 2.5, >= 2.5.4)
72 | net-imap
73 | net-pop
74 | net-smtp
75 | rails-dom-testing (~> 2.0)
76 | actionpack (7.0.3.1)
77 | actionview (= 7.0.3.1)
78 | activesupport (= 7.0.3.1)
79 | rack (~> 2.0, >= 2.2.0)
80 | rack-test (>= 0.6.3)
81 | rails-dom-testing (~> 2.0)
82 | rails-html-sanitizer (~> 1.0, >= 1.2.0)
83 | actiontext (7.0.3.1)
84 | actionpack (= 7.0.3.1)
85 | activerecord (= 7.0.3.1)
86 | activestorage (= 7.0.3.1)
87 | activesupport (= 7.0.3.1)
88 | globalid (>= 0.6.0)
89 | nokogiri (>= 1.8.5)
90 | actionview (7.0.3.1)
91 | activesupport (= 7.0.3.1)
92 | builder (~> 3.1)
93 | erubi (~> 1.4)
94 | rails-dom-testing (~> 2.0)
95 | rails-html-sanitizer (~> 1.1, >= 1.2.0)
96 | activejob (7.0.3.1)
97 | activesupport (= 7.0.3.1)
98 | globalid (>= 0.3.6)
99 | activemodel (7.0.3.1)
100 | activesupport (= 7.0.3.1)
101 | activerecord (7.0.3.1)
102 | activemodel (= 7.0.3.1)
103 | activesupport (= 7.0.3.1)
104 | activestorage (7.0.3.1)
105 | actionpack (= 7.0.3.1)
106 | activejob (= 7.0.3.1)
107 | activerecord (= 7.0.3.1)
108 | activesupport (= 7.0.3.1)
109 | marcel (~> 1.0)
110 | mini_mime (>= 1.1.0)
111 | activesupport (7.0.3.1)
112 | concurrent-ruby (~> 1.0, >= 1.0.2)
113 | i18n (>= 1.6, < 2)
114 | minitest (>= 5.1)
115 | tzinfo (~> 2.0)
116 | acts_as_list (1.0.4)
117 | activerecord (>= 4.2)
118 | amazing_print (1.4.0)
119 | builder (3.2.4)
120 | closure_tree (7.4.0)
121 | activerecord (>= 4.2.10)
122 | with_advisory_lock (>= 4.0.0)
123 | concurrent-ruby (1.1.10)
124 | crass (1.0.6)
125 | debug (1.6.2)
126 | irb (>= 1.3.6)
127 | reline (>= 0.3.1)
128 | default_where (2.2.0)
129 | activerecord (>= 4.0.0)
130 | digest (3.1.0)
131 | erubi (1.11.0)
132 | faraday (2.5.2)
133 | faraday-net_http (>= 2.0, < 3.1)
134 | ruby2_keywords (>= 0.0.4)
135 | faraday-net_http (3.0.0)
136 | faraday-retry (1.0.3)
137 | globalid (1.0.0)
138 | activesupport (>= 5.0)
139 | http-2-next (0.5.0)
140 | http-form_data (2.3.0)
141 | httpx (0.21.0)
142 | http-2-next (>= 0.4.1)
143 | i18n (1.12.0)
144 | concurrent-ruby (~> 1.0)
145 | io-console (0.5.11)
146 | irb (1.4.1)
147 | reline (>= 0.3.0)
148 | kaminari (1.2.2)
149 | activesupport (>= 4.1.0)
150 | kaminari-actionview (= 1.2.2)
151 | kaminari-activerecord (= 1.2.2)
152 | kaminari-core (= 1.2.2)
153 | kaminari-actionview (1.2.2)
154 | actionview
155 | kaminari-core (= 1.2.2)
156 | kaminari-activerecord (1.2.2)
157 | activerecord
158 | kaminari-core (= 1.2.2)
159 | kaminari-core (1.2.2)
160 | loofah (2.18.0)
161 | crass (~> 1.0.2)
162 | nokogiri (>= 1.5.9)
163 | mail (2.7.1)
164 | mini_mime (>= 0.1.1)
165 | marcel (1.0.2)
166 | method_source (1.0.0)
167 | mini_mime (1.1.2)
168 | minitest (5.16.3)
169 | net-http (0.2.2)
170 | uri
171 | net-imap (0.2.3)
172 | digest
173 | net-protocol
174 | strscan
175 | net-pop (0.1.1)
176 | digest
177 | net-protocol
178 | timeout
179 | net-protocol (0.1.3)
180 | timeout
181 | net-smtp (0.3.1)
182 | digest
183 | net-protocol
184 | timeout
185 | nio4r (2.5.8)
186 | nokogiri (1.13.8-arm64-darwin)
187 | racc (~> 1.4)
188 | pg (1.4.3)
189 | propshaft (0.6.4)
190 | actionpack (>= 7.0.0)
191 | activesupport (>= 7.0.0)
192 | rack
193 | railties (>= 7.0.0)
194 | psych (4.0.4)
195 | stringio
196 | racc (1.6.0)
197 | rack (2.2.4)
198 | rack-test (2.0.2)
199 | rack (>= 1.3)
200 | rails (7.0.3.1)
201 | actioncable (= 7.0.3.1)
202 | actionmailbox (= 7.0.3.1)
203 | actionmailer (= 7.0.3.1)
204 | actionpack (= 7.0.3.1)
205 | actiontext (= 7.0.3.1)
206 | actionview (= 7.0.3.1)
207 | activejob (= 7.0.3.1)
208 | activemodel (= 7.0.3.1)
209 | activerecord (= 7.0.3.1)
210 | activestorage (= 7.0.3.1)
211 | activesupport (= 7.0.3.1)
212 | bundler (>= 1.15.0)
213 | railties (= 7.0.3.1)
214 | rails-dom-testing (2.0.3)
215 | activesupport (>= 4.2.0)
216 | nokogiri (>= 1.6)
217 | rails-html-sanitizer (1.4.3)
218 | loofah (~> 2.3)
219 | railties (7.0.3.1)
220 | actionpack (= 7.0.3.1)
221 | activesupport (= 7.0.3.1)
222 | method_source
223 | rake (>= 12.2)
224 | thor (~> 1.0)
225 | zeitwerk (~> 2.5)
226 | rake (13.0.6)
227 | rdoc (6.4.0)
228 | psych (>= 4.0.0)
229 | reline (0.3.1)
230 | io-console (~> 0.5)
231 | ruby2_keywords (0.0.5)
232 | sdoc (2.4.0)
233 | rdoc (>= 5.0)
234 | stringio (3.0.2)
235 | strscan (3.0.4)
236 | thor (1.2.1)
237 | timeout (0.3.0)
238 | turbo-rails (1.1.1)
239 | actionpack (>= 6.0.0)
240 | activejob (>= 6.0.0)
241 | railties (>= 6.0.0)
242 | tzinfo (2.0.5)
243 | concurrent-ruby (~> 1.0)
244 | uri (0.11.0)
245 | websocket-driver (0.7.5)
246 | websocket-extensions (>= 0.1.0)
247 | websocket-extensions (0.1.5)
248 | with_advisory_lock (4.6.0)
249 | activerecord (>= 4.2)
250 | zeitwerk (2.6.0)
251 |
252 | PLATFORMS
253 | arm64-darwin-21
254 |
255 | DEPENDENCIES
256 | amazing_print
257 | debug
258 | pg
259 | propshaft
260 | rails
261 | rails_com!
262 | rails_design!
263 | rails_extend!
264 | rails_org!
265 | rails_serve!
266 | sdoc
267 |
268 | BUNDLED WITH
269 | 2.3.7
270 |
--------------------------------------------------------------------------------