symphonia 3.4.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -4
  3. data/CHANGELOG.md +12 -0
  4. data/README.md +16 -0
  5. data/app/controllers/symphonia/admin_controller.rb +1 -4
  6. data/app/views/symphonia/admin/index.html.erb +1 -11
  7. data/db/migrate/20130714140501_create_roles.rb +6 -4
  8. data/db/migrate/20200428180001_add_uuid_to_users.rb +4 -2
  9. data/db/migrate/20210509141420_roles_change_permissions_to_json.rb +18 -0
  10. data/db/migrate/20210509180525_roles_change_permissions_to_native_json.rb +7 -0
  11. data/lib/generators/symphonia/setup/setup_generator.rb +17 -14
  12. data/lib/generators/symphonia/setup/templates/{settings.rb → app/config/initializers/settings.rb.tt} +0 -0
  13. data/lib/generators/symphonia/setup/templates/{404.html → public/404.html.tt} +2 -2
  14. data/lib/generators/symphonia/setup/templates/{500.html → public/500.html.tt} +2 -2
  15. data/lib/generators/symphonia/setup/templates/{spec_helper.rb → spec/spec_helper.rb.tt} +3 -2
  16. data/lib/symphonia.rb +4 -1
  17. data/lib/symphonia/model_attributes/attribute.rb +30 -14
  18. data/lib/symphonia/model_filters/base.rb +13 -15
  19. data/lib/symphonia/model_filters/boolean_filter.rb +10 -11
  20. data/lib/symphonia/model_filters/date_filter.rb +32 -31
  21. data/lib/symphonia/model_filters/integer_filter.rb +4 -5
  22. data/lib/symphonia/model_filters/select_filter.rb +19 -17
  23. data/lib/symphonia/model_filters/string_filter.rb +4 -5
  24. data/lib/symphonia/query.rb +10 -34
  25. data/lib/symphonia/query_columns.rb +1 -2
  26. data/lib/symphonia/query_columns/attribute_column.rb +59 -5
  27. data/lib/symphonia/spec_helper.rb +5 -3
  28. data/lib/symphonia/version.rb +3 -1
  29. data/spec/controllers/account_controller_spec.rb +66 -69
  30. data/spec/controllers/admin_controller_spec.rb +24 -25
  31. data/spec/libs/some_lib_spec.rb +1 -1
  32. data/spec/rails_helper.rb +4 -3
  33. data/spec/spec_helper.rb +3 -8
  34. metadata +71 -158
  35. data/app/models/symphonia/admin_module.rb +0 -18
  36. data/app/views/symphonia/filters/table.html.erb +0 -21
  37. data/db/migrate/20130828175114_create_attachments.rb +0 -20
  38. data/db/migrate/20141213204351_create_admin_modules.rb +0 -20
  39. data/lib/symphonia/query_columns/generic_column.rb +0 -165
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 690d5654253b68fefb5088b8938130e37baf32e2ac3a533af0ded29909f66a01
4
- data.tar.gz: 208b3dac35095799df42c565300f8c7877dad70a52ce966c6c7ad8e75048c710
3
+ metadata.gz: 68c44e1f10ceb644917147a7e5cd28caa1a6054a8bffed6e85fa7e76a90d9956
4
+ data.tar.gz: dfaa2c7d6d6e0c6960a59722998542af1e16ca644fdeefbe6ffcc5be5087ef96
5
5
  SHA512:
6
- metadata.gz: c23c2f1972886ac602da1fcd7fc0259b998a53787999bab18b7c320044b64a176a77227d20ec7d896868d74829464812f8a95a6910216e295f5b263dd65c3e65
7
- data.tar.gz: caa04002e0307779c75a0542124e6ca09a76463fb27b23aec0aa079b81d0af0b8c8cfabed6541472bc146ac1c086087910196969b85c83251b7a865eb906e4fe
6
+ metadata.gz: 0f9b8fca0586ade8130cf789e367b5724a38f7cf44597f48b15819098034a53b3e2d42007d05a13fd73e70e91922e3cd681fffef284abc70a67b1fef868586ca
7
+ data.tar.gz: '08bc13b2b16c0001c9389238771b2dfc0c1c97400fecad96540f6fdadcd9ac343a2c918bcd8699b8c7bf11fe9c862b0826ae6be62628fbec54518b9b6480ff95'
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: 2.5
3
+ NewCops: enable
3
4
 
4
5
  Layout/EmptyLinesAroundClassBody:
5
6
  EnforcedStyle: empty_lines_special
@@ -12,15 +13,13 @@ Metrics/AbcSize:
12
13
  Enabled: false
13
14
  Metrics/BlockLength:
14
15
  Enabled: false
15
- #Metrics/LineLength:
16
- # Enabled: false
17
16
  Metrics/MethodLength:
18
17
  Enabled: false
19
18
 
20
- #Style/BracesAroundHashParameters:
21
- # EnforcedStyle: context_dependent
22
19
  Style/Documentation:
23
20
  Enabled: false
21
+ Style/FrozenStringLiteralComment:
22
+ Enabled: false
24
23
  Style/MutableConstant:
25
24
  Enabled: false
26
25
  Style/NegatedIf:
data/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
+ ### Removed
9
+ - development dependency in gemspec replaced by `symphonia_spec` gem
10
+ - GenericColumn in Query
11
+ - AdminModule class/table = its not used, its not working
12
+ ### Changed
13
+ - Rails 6.1 support
14
+ - Query#to_params boolean argument to named
15
+ - update generators
16
+ - use native JSON columns instead of serializations
17
+ ### Added
18
+ - Gemfile.lock
19
+
8
20
  ## [3.4.0] - 2021-03-22
9
21
  ### Changed
10
22
  - upgrade authlogic to 6.4.1 (rails6.1 compatible)
data/README.md CHANGED
@@ -14,3 +14,19 @@ after `bundle install` run post-installation: `rails g symphonia:setup`
14
14
  > Setup prepare `config/initializers/settings.rb`, create `spec/spec_helper.rb`, add stylesheets and javascripts references and copy basic layout.
15
15
 
16
16
 
17
+ ## Upgrade to v4.0
18
+ 1. update Gemfile:
19
+ ```ruby
20
+ gem 'rails', '~> 6.1'
21
+ gem 'symphonia', '~> 4.0'
22
+ source "https://gems.luk4s.cz" do
23
+ gem 'symphonia_spec', group: %i[development test]
24
+ end
25
+ ```
26
+ And `bundle update`
27
+ 2. upgrade rails:
28
+ https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
29
+ ```bash
30
+ export THOR_MERGE=vimdiff
31
+ rails app:update
32
+ ```
@@ -3,9 +3,6 @@ module Symphonia
3
3
  before_action :login_require
4
4
 
5
5
  def index
6
- @admin_modules = AdminModule.where(user_id: [nil, current_user.id]).order(:position).all
7
- @modules_count = @admin_modules.count
8
-
9
6
  respond_to do |format|
10
7
  format.html
11
8
  end
@@ -19,4 +16,4 @@ module Symphonia
19
16
 
20
17
  end
21
18
 
22
- end
19
+ end
@@ -1,15 +1,5 @@
1
1
  <%= title 'Administrace' %>
2
- <% @admin_modules.each_with_index do |admin_module, _index| %>
3
- <div class="col-lg-<%= @modules_count == 1 ? '12' : '6' %>" id="<%= dom_id(admin_module) %>">
4
- <h3><%= t(admin_module.title, scope: [:admin_module, :titles], default: admin_module.title) %></h3>
5
- <% if admin_module.body_path.is_a?(Symbol) %>
6
- <%= render(partial: "admin_modules/#{admin_module.body_path}", locals: { admin_module: admin_module }) -%>
7
- <% else %>
8
- <%= format_text(admin_module.body_path) -%>
9
- <% end -%>
10
- </div>
11
- <% end -%>
12
2
 
13
3
  <%= content_for :meta_tags do %>
14
4
  <meta name="turbolinks-root" content="/admin">
15
- <% end %>
5
+ <% end %>
@@ -1,10 +1,11 @@
1
- class CreateRoles < ActiveRecord::Migration[5.1]
1
+ class CreateRoles < ActiveRecord::Migration[6.1]
2
+
2
3
  def up
3
4
  create_table :roles do |t|
4
- t.string :name, :null => false
5
- t.text :description, :null => true
5
+ t.string :name, null: false
6
+ t.text :description, null: true
6
7
 
7
- t.text :permissions
8
+ t.text :permissions
8
9
 
9
10
  t.timestamps
10
11
  end
@@ -13,4 +14,5 @@ class CreateRoles < ActiveRecord::Migration[5.1]
13
14
  def down
14
15
  drop_table :roles
15
16
  end
17
+
16
18
  end
@@ -1,6 +1,8 @@
1
1
  class AddUuidToUsers < ActiveRecord::Migration[6.0]
2
+
2
3
  def change
3
- uuid_type = connection.adapter_name =~ /PostgreSQL/i ? :uuid : :string
4
- add_column :users, :uuid, uuid_type
4
+ # uuid_type = connection.adapter_name =~ /PostgreSQL/i ? :uuid : :string
5
+ add_column :users, :uuid, :uuid
5
6
  end
7
+
6
8
  end
@@ -0,0 +1,18 @@
1
+ class RolesChangePermissionsToJson < ActiveRecord::Migration[6.1]
2
+
3
+ def up
4
+ say_with_time "Convert 'roles.permissions' YAML to JSON" do
5
+ i = 0
6
+ Symphonia::Role.where.not(permissions: nil).each do |role|
7
+ yaml = product.read_attribute_before_type_cast :permissions
8
+ next unless yaml.start_with? "---"
9
+
10
+ role.update_columns permissions: YAML.safe_load(yaml)
11
+ i += 1
12
+ end
13
+
14
+ i
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,7 @@
1
+ class RolesChangePermissionsToNativeJson < ActiveRecord::Migration[6.1]
2
+
3
+ def up
4
+ change_column :roles, :permissions, :jsonb, using: 'permissions::jsonb'
5
+ end
6
+
7
+ end
@@ -2,17 +2,16 @@ require 'rails/generators'
2
2
 
3
3
  module Symphonia
4
4
  class SetupGenerator < Rails::Generators::Base
5
- # include Rails::Generators::Migration
6
5
 
7
6
  source_root File.expand_path('templates', __dir__)
8
7
 
9
8
  def create_settings
10
- copy_file 'settings.rb', 'config/initializers/settings.rb'
9
+ template 'config/initializers/settings.rb'
11
10
  end
12
11
 
13
12
  def copy_static
14
- copy_file '404.html', 'public/404.html'
15
- copy_file '500.html', 'public/500.html'
13
+ template 'public/404.html'
14
+ template 'public/500.html'
16
15
  end
17
16
 
18
17
  def copy_assets
@@ -22,16 +21,14 @@ module Symphonia
22
21
  end
23
22
 
24
23
  def copy_rspec
25
- copy_file 'spec_helper.rb', 'spec/spec_helper.rb'
24
+ template 'spec/spec_helper.rb'
26
25
 
27
26
  create_file '.rspec' do
28
- '--require spec_helper'
29
- '--format documentation'
27
+ "--require spec_helper"
30
28
  end
31
29
  end
32
30
 
33
31
  def copy_setup_file
34
-
35
32
  copy_file 'base_layout.html.erb', 'app/views/layouts/application.html.erb'
36
33
 
37
34
  append_to_file 'db/seeds.rb', 'Symphonia::Engine.load_seed'
@@ -40,14 +37,20 @@ module Symphonia
40
37
  inject_into_file 'config/routes.rb', after: "Rails.application.routes.draw do\n" do
41
38
  " mount Symphonia::Engine => '/'"
42
39
  end
40
+ end
41
+
42
+ def rubocop
43
+ create_file '.rubocop.yml' do
44
+ "inherit_gem:\n symphonia: .rubocop.yml"
45
+ end
46
+ end
47
+
48
+ def setup_gemfile
49
+ append_to_file 'Gemfile' do
50
+ "gem 'symphonia-spec', source: 'https://gems.luk4s.cz', group: %w[development test]"
51
+ end
43
52
 
44
53
  end
45
54
 
46
- # def setup_gemfile
47
- # append_to_file 'Gemfile' do
48
- # File.read(File.join(File.dirname(__FILE__), 'templates/Gemfile'))
49
- # end
50
- #
51
- # end
52
55
  end
53
56
  end
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>404 STránka nenalezena</title>
7
- <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
8
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" />
7
+ <link rel="stylesheet" href="//stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
8
+ <link rel="stylesheet" href="//stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
9
9
  </head>
10
10
 
11
11
  <body>
@@ -26,10 +26,10 @@
26
26
  <h3>Lukáš Pokorný</h3>
27
27
  </li>
28
28
  <li>
29
- <i class="fa fa-li fa fa-envelope"></i>e-mail: <a href="mailto:admin@lagrace.cz">admin@lagrace.cz</a>
29
+ <i class="fa fa-li fa-envelope"></i>e-mail: <a href="mailto:admin@lagrace.cz">admin@luk4s.cz</a>
30
30
  </li>
31
31
  <li>
32
- <i class="fa fa-li fa fa-mobile-phone"></i>tel: 604484983
32
+ <i class="fa fa-li fa-mobile-phone"></i>tel: 604484983
33
33
  </li>
34
34
  </ul>
35
35
  </div>
@@ -1,11 +1,11 @@
1
1
  ENV['RAILS_ENV'] ||= 'test'
2
- require File.expand_path('../../config/environment', __FILE__)
2
+ require_relative '../../config/environment'
3
3
  # Prevent database truncation if the environment is production
4
4
  abort('The Rails environment is running in production mode!') if Rails.env.production?
5
5
 
6
6
  # require 'symphonia'
7
7
  RSpec.configure do |config|
8
- Dir.glob(File.join(__dir__, 'support', '*.rb')).each { |f| require f }
8
+ Dir.glob(File.join(__dir__, 'support', '*.rb')).sort.each { |f| require f }
9
9
 
10
10
  require 'symphonia/spec_helper'
11
11
 
@@ -15,4 +15,5 @@ RSpec.configure do |config|
15
15
 
16
16
  config.infer_spec_type_from_file_location!
17
17
  config.filter_rails_from_backtrace!
18
+ config.profile_examples = true
18
19
  end
data/lib/symphonia.rb CHANGED
@@ -1,5 +1,5 @@
1
- # Dir[File.dirname(__FILE__) + '/symphonia/*.rb'].each {|file| require file }
2
1
  module Symphonia
2
+
3
3
  include ::ActiveSupport::Configurable
4
4
 
5
5
  autoload :BaseController, 'symphonia/base_controller'
@@ -13,8 +13,11 @@ module Symphonia
13
13
  autoload :QueryColumns, 'symphonia/query_columns'
14
14
 
15
15
  module ActionCable
16
+
16
17
  autoload :Connection, 'symphonia/action_cable/connection'
18
+
17
19
  end
20
+
18
21
  end
19
22
 
20
23
  require 'symphonia/engine'
@@ -1,9 +1,9 @@
1
1
  module Symphonia
2
2
  module ModelAttributes
3
+
3
4
  class Attribute
4
5
 
5
- attr_reader :name, :options
6
- attr_reader :format_options, :sort_column
6
+ attr_reader :name, :options, :format_options, :sort_column
7
7
  attr_accessor :filter
8
8
 
9
9
  def initialize(name, klass, options, formatter)
@@ -78,27 +78,34 @@ module Symphonia
78
78
  def format_value(_view, value, _entity)
79
79
  value.to_s
80
80
  end
81
+
81
82
  end
82
83
 
83
84
 
84
85
  class TextAttribute < Attribute
85
- def format_value(view, value, entity)
86
+
87
+ def format_value(view, value, _entity)
86
88
  view.format_text(value)
87
89
  end
88
90
 
89
91
  def input_field
90
92
  :text_area
91
93
  end
94
+
92
95
  end
96
+
93
97
  class DecimalAttribute < Attribute
94
- def format_value(view, value, entity)
98
+
99
+ def format_value(view, value, _entity)
95
100
  view.format_price(value)
96
101
  end
102
+
97
103
  end
98
104
 
99
105
  class EnumAttribute < Attribute
106
+
100
107
  # TODO: @klass.name || @klass.base_class.name || entity.class.name
101
- def format_value(view, value, entity)
108
+ def format_value(view, value, _entity)
102
109
  view.t("#{@klass.name.underscore}.#{name.to_s.pluralize}.#{value}", format_options)
103
110
  end
104
111
 
@@ -109,26 +116,27 @@ module Symphonia
109
116
  def input_options
110
117
  []
111
118
  end
119
+
112
120
  end
113
121
 
114
122
  class LinkAttribute < Attribute
123
+
115
124
  def format_value(view, value, entity)
116
125
  view.link_to value.to_s, entity, format_options
117
126
  end
127
+
118
128
  end
119
129
 
120
130
  class MailAttribute < Attribute
121
- def format_value(view, value, entity)
131
+
132
+ def format_value(view, value, _entity)
122
133
  view.mail_to value.to_s, value.to_s, format_options
123
134
  end
135
+
124
136
  end
125
137
 
126
138
  class ReferenceAttribute < Attribute
127
139
 
128
- def initialize(name, klass, options, formatter)
129
- super
130
- end
131
-
132
140
  def title
133
141
  if (ref = @klass.reflect_on_association(name)).macro == :belongs_to
134
142
  @klass.human_attribute_name(ref.foreign_key, @options[:i18n] || {})
@@ -138,7 +146,7 @@ module Symphonia
138
146
 
139
147
  end
140
148
 
141
- def format_value(view, value, entity)
149
+ def format_value(view, value, _entity)
142
150
  if value.is_a?(ActiveRecord::Associations::CollectionProxy) || value.is_a?(Array)
143
151
  value.collect { |v| view.link_to v.to_s, v, format_options }.join("\n").html_safe
144
152
  else
@@ -153,7 +161,8 @@ module Symphonia
153
161
  end
154
162
 
155
163
  class BooleanAttribute < Attribute
156
- def format_value(view, value, entity)
164
+
165
+ def format_value(view, value, _entity)
157
166
  if value.to_boolean
158
167
  view.icon('true', view.t(:true))
159
168
  else
@@ -164,21 +173,28 @@ module Symphonia
164
173
  def input_field
165
174
  :check_box
166
175
  end
176
+
167
177
  end
168
178
 
169
179
  class DateAttribute < Attribute
170
- def format_value(view, value, entity)
180
+
181
+ def format_value(view, value, _entity)
171
182
  value && view.l(value.to_date, format_options)
172
183
  end
184
+
173
185
  end
174
186
 
175
187
  class DateTimeAttribute < Attribute
176
- def format_value(view, value, entity)
188
+
189
+ def format_value(view, value, _entity)
177
190
  value && view.l(value.localtime, format_options)
178
191
  end
192
+
179
193
  end
194
+
180
195
  class DatetimeAttribute < DateTimeAttribute
181
196
  # alias
182
197
  end
198
+
183
199
  end
184
200
  end
@@ -1,7 +1,7 @@
1
1
  module Symphonia
2
2
  module ModelFilters
3
3
  class Base
4
- attr_reader :name, :type, :caption, :options, :query, :value, :operator
4
+ attr_reader :name, :type, :options, :query, :value, :operator
5
5
 
6
6
  # @param [Symphonia::ModelAttributes::Attribute] attribute
7
7
  # @param [Symphonia::Query] query
@@ -24,7 +24,7 @@ module Symphonia
24
24
  @caption ||= query.model.human_attribute_name(name)
25
25
  end
26
26
 
27
- def form_field(_c)
27
+ def form_field(_context)
28
28
  raise NotImplementError
29
29
  end
30
30
 
@@ -36,20 +36,18 @@ module Symphonia
36
36
  !!query.active_filters[name]
37
37
  end
38
38
 
39
- def value=(q)
40
- if (m = q.downcase.match(/^([!~><]+)(.*)/))
41
- @value = m[2]
42
- self.operator = m[1]
43
- else
44
- @operator ||= 'eq'
45
- @value = q
46
- end
47
-
48
- @value
39
+ def value=(to)
40
+ @value = if (m = to.downcase.match(/^([!~><]+)(.*)/))
41
+ self.operator = m[1]
42
+ m[2]
43
+ else
44
+ @operator ||= 'eq'
45
+ to
46
+ end
49
47
  end
50
48
 
51
- def operator=(o)
52
- @operator = case o
49
+ def operator=(to)
50
+ @operator = case to
53
51
  when '!'
54
52
  'not_eq'
55
53
  when '~'
@@ -79,4 +77,4 @@ module Symphonia
79
77
 
80
78
  end
81
79
  end
82
- end
80
+ end