symphonia 3.4.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -4
- data/CHANGELOG.md +12 -0
- data/README.md +16 -0
- data/app/controllers/symphonia/admin_controller.rb +1 -4
- data/app/views/symphonia/admin/index.html.erb +1 -11
- data/db/migrate/20130714140501_create_roles.rb +6 -4
- data/db/migrate/20200428180001_add_uuid_to_users.rb +4 -2
- data/db/migrate/20210509141420_roles_change_permissions_to_json.rb +18 -0
- data/db/migrate/20210509180525_roles_change_permissions_to_native_json.rb +7 -0
- data/lib/generators/symphonia/setup/setup_generator.rb +17 -14
- data/lib/generators/symphonia/setup/templates/{settings.rb → app/config/initializers/settings.rb.tt} +0 -0
- data/lib/generators/symphonia/setup/templates/{404.html → public/404.html.tt} +2 -2
- data/lib/generators/symphonia/setup/templates/{500.html → public/500.html.tt} +2 -2
- data/lib/generators/symphonia/setup/templates/{spec_helper.rb → spec/spec_helper.rb.tt} +3 -2
- data/lib/symphonia.rb +4 -1
- data/lib/symphonia/model_attributes/attribute.rb +30 -14
- data/lib/symphonia/model_filters/base.rb +13 -15
- data/lib/symphonia/model_filters/boolean_filter.rb +10 -11
- data/lib/symphonia/model_filters/date_filter.rb +32 -31
- data/lib/symphonia/model_filters/integer_filter.rb +4 -5
- data/lib/symphonia/model_filters/select_filter.rb +19 -17
- data/lib/symphonia/model_filters/string_filter.rb +4 -5
- data/lib/symphonia/query.rb +10 -34
- data/lib/symphonia/query_columns.rb +1 -2
- data/lib/symphonia/query_columns/attribute_column.rb +59 -5
- data/lib/symphonia/spec_helper.rb +5 -3
- data/lib/symphonia/version.rb +3 -1
- data/spec/controllers/account_controller_spec.rb +66 -69
- data/spec/controllers/admin_controller_spec.rb +24 -25
- data/spec/libs/some_lib_spec.rb +1 -1
- data/spec/rails_helper.rb +4 -3
- data/spec/spec_helper.rb +3 -8
- metadata +71 -158
- data/app/models/symphonia/admin_module.rb +0 -18
- data/app/views/symphonia/filters/table.html.erb +0 -21
- data/db/migrate/20130828175114_create_attachments.rb +0 -20
- data/db/migrate/20141213204351_create_admin_modules.rb +0 -20
- data/lib/symphonia/query_columns/generic_column.rb +0 -165
@@ -1,18 +0,0 @@
|
|
1
|
-
module Symphonia
|
2
|
-
class AdminModule < ApplicationRecord
|
3
|
-
self.table_name = 'admin_modules'
|
4
|
-
|
5
|
-
belongs_to :user
|
6
|
-
store :settings, coder: JSON
|
7
|
-
|
8
|
-
validates :title, presence: true
|
9
|
-
validates :panel_type, inclusion: { in: %w(default primary success info warning danger) }
|
10
|
-
|
11
|
-
|
12
|
-
def body_path
|
13
|
-
# override me
|
14
|
-
self.description
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
<%# if entities.any? %>
|
2
|
-
<div id="query_data">
|
3
|
-
<table class="table <%= query.entity.name.pluralize.underscore %> table-striped">
|
4
|
-
<thead>
|
5
|
-
<tr>
|
6
|
-
<%= table_header_tag_for(query.model) do |t|
|
7
|
-
query.columns.each{|c| c.header(t)}
|
8
|
-
end %>
|
9
|
-
<th></th>
|
10
|
-
</tr>
|
11
|
-
</thead>
|
12
|
-
<tbody>
|
13
|
-
<%= tbody %>
|
14
|
-
</tbody>
|
15
|
-
</table>
|
16
|
-
|
17
|
-
<%#= will_paginate entities %>
|
18
|
-
</div>
|
19
|
-
<%# else %>
|
20
|
-
<%#= render_no_data %>
|
21
|
-
<%# end %>
|
@@ -1,20 +0,0 @@
|
|
1
|
-
class CreateAttachments < ActiveRecord::Migration[5.1]
|
2
|
-
def change
|
3
|
-
create_table :attachments do |t|
|
4
|
-
t.string :type
|
5
|
-
t.string :attachment_file_name, null: false
|
6
|
-
t.string :attachment_content_type, null: false
|
7
|
-
t.integer :attachment_file_size, null: false
|
8
|
-
t.datetime :attachment_updated_at, null: false
|
9
|
-
|
10
|
-
t.references :attachable, polymorphic: true, null: true
|
11
|
-
|
12
|
-
t.text :description, null: true
|
13
|
-
t.integer :position, default: 1, index: true
|
14
|
-
|
15
|
-
t.timestamps null: false
|
16
|
-
|
17
|
-
t.index([:type, :attachable_type])
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
class CreateAdminModules < ActiveRecord::Migration[5.1]
|
2
|
-
def up
|
3
|
-
create_table :admin_modules do |t|
|
4
|
-
t.string :type
|
5
|
-
t.string :title
|
6
|
-
t.text :description
|
7
|
-
t.string :panel_type, :default => 'default'
|
8
|
-
t.text :settings#, :limit => 100.megabytes
|
9
|
-
t.belongs_to :user, :null => true
|
10
|
-
|
11
|
-
t.integer :position, default: 1, index: true
|
12
|
-
|
13
|
-
t.timestamps
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def down
|
18
|
-
drop_table(:admin_modules)
|
19
|
-
end
|
20
|
-
end
|
@@ -1,165 +0,0 @@
|
|
1
|
-
module Symphonia
|
2
|
-
module QueryColumns
|
3
|
-
class GenericColumn
|
4
|
-
|
5
|
-
attr_reader :name, :query, :model, :includes, :preload, :joins
|
6
|
-
attr_writer :sort_column_name, :sort_definition
|
7
|
-
attr_accessor :sort, :header, :default
|
8
|
-
|
9
|
-
def initialize(name, klass = nil, options={})
|
10
|
-
::ActiveSupport::Deprecation.warn 'Maybe this class is over...'
|
11
|
-
@name = name
|
12
|
-
if klass.is_a? Symphonia::Query
|
13
|
-
@query = klass
|
14
|
-
@model = @query.model
|
15
|
-
elsif klass < ActiveRecord::Base
|
16
|
-
@model = klass
|
17
|
-
else # default fallback
|
18
|
-
@model = ActiveRecord::Base
|
19
|
-
end
|
20
|
-
@options = options
|
21
|
-
|
22
|
-
# @sort_options = @options.delete(:sort_options) || {}
|
23
|
-
self.header = @options.delete(:header).nil?
|
24
|
-
self.sort = @options.delete(:sort).nil?
|
25
|
-
|
26
|
-
@includes = Array(options.delete(:includes)) || []
|
27
|
-
@preload = Array(options.delete(:preload)) || []
|
28
|
-
@joins = Array(options.delete(:joins)) || []
|
29
|
-
end
|
30
|
-
|
31
|
-
def summarize?
|
32
|
-
false
|
33
|
-
end
|
34
|
-
|
35
|
-
def header?
|
36
|
-
!(@header === false)
|
37
|
-
end
|
38
|
-
|
39
|
-
def sort?
|
40
|
-
!(@sort === false)
|
41
|
-
end
|
42
|
-
|
43
|
-
def default?
|
44
|
-
!!@default
|
45
|
-
end
|
46
|
-
|
47
|
-
def header(view)
|
48
|
-
::ActiveSupport::Deprecation.warn 'Header method is deprecated -> use app/helpers/symphonia/renderer_helper.rb:59'
|
49
|
-
if @no_header || @header === false
|
50
|
-
title
|
51
|
-
else
|
52
|
-
view.symphonia_query_sort_tag(self)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def sort_definition
|
57
|
-
return nil unless sort?
|
58
|
-
@sort_definition ||= SortableTable::SortColumnCustomDefinition.new(@name, {asc: "#{sort_column_name} asc", desc: "#{sort_column_name} desc"})
|
59
|
-
end
|
60
|
-
|
61
|
-
def title
|
62
|
-
::ActiveSupport::Deprecation.warn 'method is deprecated'
|
63
|
-
@model.human_attribute_name(@name, @options[:i18n] || {})
|
64
|
-
end
|
65
|
-
|
66
|
-
def sort_options
|
67
|
-
@sort_options
|
68
|
-
end
|
69
|
-
|
70
|
-
def value(entity)
|
71
|
-
entity.send(name)
|
72
|
-
end
|
73
|
-
|
74
|
-
def format_value(view, entity)
|
75
|
-
if @options[:formatter].is_a?(Proc)
|
76
|
-
@options[:formatter].call(view, entity).to_s
|
77
|
-
else
|
78
|
-
case @options[:with_link]
|
79
|
-
when :entity, true
|
80
|
-
view.link_to(value(entity).to_s, entity)
|
81
|
-
when :value
|
82
|
-
view.link_to(value(entity).to_s, value(entity))
|
83
|
-
else
|
84
|
-
value(entity).to_s
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def sum_value(view)
|
90
|
-
format_value(view, OpenStruct.new(name => sum))
|
91
|
-
end
|
92
|
-
|
93
|
-
def sum
|
94
|
-
return nil unless summarize?
|
95
|
-
@sum ||= query.entities.sum(name)
|
96
|
-
end
|
97
|
-
|
98
|
-
def css_classes
|
99
|
-
@name.to_s
|
100
|
-
end
|
101
|
-
|
102
|
-
def inspect
|
103
|
-
"#<#{self.class.name} name='#{name}' options=#{@options.inspect}>"
|
104
|
-
end
|
105
|
-
|
106
|
-
private
|
107
|
-
|
108
|
-
def t(*args)
|
109
|
-
I18n.translate(*args)
|
110
|
-
end
|
111
|
-
|
112
|
-
def l(*args)
|
113
|
-
I18n.localize(*args)
|
114
|
-
end
|
115
|
-
|
116
|
-
def sort_column_name
|
117
|
-
@sort_column_name.presence || [@model.table_name, @name].join('.')
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
class TextColumn < GenericColumn
|
122
|
-
|
123
|
-
def format_value(view, entity)
|
124
|
-
view.format_text(super(view, entity))
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
class NumberColumn < GenericColumn
|
130
|
-
|
131
|
-
def summarize?
|
132
|
-
true
|
133
|
-
end
|
134
|
-
|
135
|
-
end
|
136
|
-
|
137
|
-
class PriceColumn < NumberColumn
|
138
|
-
|
139
|
-
def format_value(view, entity)
|
140
|
-
view.format_price(super(view, entity))
|
141
|
-
end
|
142
|
-
|
143
|
-
end
|
144
|
-
|
145
|
-
class DateColumn < GenericColumn
|
146
|
-
|
147
|
-
def format_value(view, entity)
|
148
|
-
value(entity) && l(value(entity), format: @options[:format])
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|
152
|
-
|
153
|
-
class BooleanColumn < GenericColumn
|
154
|
-
|
155
|
-
def format_value(view, entity)
|
156
|
-
if value(entity)
|
157
|
-
view.fa_icon('true', title: t(:true))
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
|
-
end
|
164
|
-
|
165
|
-
end
|