compony 0.0.9 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8157d970b7bb216a92e5ff27931775e1744063efcb91bd8c2c094d998bc0d74d
4
- data.tar.gz: 1a10cfd007f6c94f2bd71076bd90688bd6761a597962414f56f31570cb4b6c31
3
+ metadata.gz: ecb0c40f2981194e5fa6a297731c5f224f49c8d73594f016149567da28553c93
4
+ data.tar.gz: 93b518bd1fd54dd04a628df57f18ee120b2be4485241b50b9143fe136eb4bb14
5
5
  SHA512:
6
- metadata.gz: 37fdaa0c7e0c6e905fbf5239d79dc9df15bb27e3cf805953fc9daf75e421f04dc14b087165e2049c5e4ff87a13464d197a837cea24517467d591ff115c7f2cd3
7
- data.tar.gz: 3f59823928a888c4bb5f501f4e1440ff4e3a1f83f627d23117af9c5b5e7afba65db48168a70685010c9c251f4b7331a232843a6209634ad004c3a15a0ee6653a
6
+ metadata.gz: d4f6f506c58e51ab3086b8a3870d05bccaefca10529869b90ed11b6ce83f0d76c6c114062c62a99ecdc3fa08dc24b8f55b825a586c640919b176ba2110eb7b7f
7
+ data.tar.gz: afddee67f4c6659008704e572bee553ec6350f3fb8ad06550089e9b1954a913e5e0faf43b6d83cb35b0ae14f70c4889577cab13fda427f5a9e7d25341a442164
data/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
+ # 0.1.1
2
+
3
+ - Support and force Rails 7.1.2
4
+
5
+ ## Steps to perform
6
+
7
+ - in `config/application.rb`, replace `config.load_defaults 7.0` by `config.load_defaults 7.1` and add:
8
+ ```ruby
9
+ # Please, add to the `ignore` list any other `lib` subdirectories that do
10
+ # not contain `.rb` files, or that should not be reloaded or eager loaded.
11
+ # Common ones are `templates`, `generators`, or `middleware`, for example.
12
+ config.autoload_lib(ignore: %w(assets tasks))
13
+ ```
14
+
15
+ # 0.1.0
16
+
17
+ - Remove (hopefully) obsolete database safeguard in `resolve_association!` as we should no longer be accessing the DB.
18
+ - BREAKING: Remove `primary_key_type` and tolerate int and str as primary and foreign key in all params.
19
+ - This fixes a bug introduced in 0.0.10 breaking polymorphic relations.
20
+ - Support Rails 7.1
21
+ - No longer rely on `controller.response.body.blank?` but use `controller.response_body.nil?` instead
22
+
23
+ ## Steps to perform
24
+
25
+ - Remove any calls to `primary_key_type`
26
+
1
27
  # 0.0.9
2
28
 
29
+ Do not use.
30
+
3
31
  - Support forms with references to tables with uuid type primary key
4
32
  - Support for `owned_by` in model:
5
33
  - Smart redirect
@@ -9,6 +37,10 @@
9
37
  - Add features `Compony.content_before_root_comp` and `Compony.content_after_root_comp`
10
38
  - Add new field kind percentage
11
39
 
40
+ ## KNOWN BUGS
41
+
42
+ - This version breaks polymorphic relations.
43
+
12
44
  # 0.0.8
13
45
 
14
46
  - Support selecting anchormodel inputs via radio buttons
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- compony (0.0.9.edge)
4
+ compony (0.1.0)
5
5
  anchormodel (~> 0.1.2)
6
6
  cancancan (~> 3.4.0)
7
7
  dslblend (>= 0.0.3)
data/Rakefile CHANGED
@@ -17,6 +17,7 @@ task :gemspec do
17
17
  s.add_development_dependency 'rubocop', '>= 1.48'
18
18
  s.add_development_dependency 'rubocop-rails', '>= 2.18.0'
19
19
 
20
+ s.add_runtime_dependency 'rails', '>= 7.1.2'
20
21
  s.add_runtime_dependency 'request_store', '>= 1.5'
21
22
  s.add_runtime_dependency 'dyny', '>= 0.0.3'
22
23
  s.add_runtime_dependency 'schemacop', '>= 3.0.17'
data/compony.gemspec CHANGED
@@ -2,31 +2,32 @@
2
2
  # This file is auto-generated via: 'rake gemspec'.
3
3
 
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: compony 0.0.9 ruby lib
5
+ # stub: compony 0.1.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "compony".freeze
9
- s.version = "0.0.9"
9
+ s.version = "0.1.1".freeze
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Sandro Kalbermatter".freeze, "contributors".freeze]
14
- s.date = "2023-11-03"
14
+ s.date = "2023-11-23"
15
15
  s.files = [".gitignore".freeze, ".ruby-version".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "Gemfile.lock".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "app/controllers/compony_controller.rb".freeze, "compony.gemspec".freeze, "config/locales/de.yml".freeze, "config/locales/en.yml".freeze, "config/routes.rb".freeze, "doc/resourceful_lifecycle.graphml".freeze, "doc/resourceful_lifecycle.pdf".freeze, "lib/compony.rb".freeze, "lib/compony/component.rb".freeze, "lib/compony/component_mixins/default/labelling.rb".freeze, "lib/compony/component_mixins/default/standalone.rb".freeze, "lib/compony/component_mixins/default/standalone/resourceful_verb_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/standalone_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/verb_dsl.rb".freeze, "lib/compony/component_mixins/resourceful.rb".freeze, "lib/compony/components/button.rb".freeze, "lib/compony/components/destroy.rb".freeze, "lib/compony/components/edit.rb".freeze, "lib/compony/components/form.rb".freeze, "lib/compony/components/new.rb".freeze, "lib/compony/components/with_form.rb".freeze, "lib/compony/controller_mixin.rb".freeze, "lib/compony/engine.rb".freeze, "lib/compony/method_accessible_hash.rb".freeze, "lib/compony/model_fields/anchormodel.rb".freeze, "lib/compony/model_fields/association.rb".freeze, "lib/compony/model_fields/attachment.rb".freeze, "lib/compony/model_fields/base.rb".freeze, "lib/compony/model_fields/boolean.rb".freeze, "lib/compony/model_fields/color.rb".freeze, "lib/compony/model_fields/currency.rb".freeze, "lib/compony/model_fields/date.rb".freeze, "lib/compony/model_fields/datetime.rb".freeze, "lib/compony/model_fields/decimal.rb".freeze, "lib/compony/model_fields/email.rb".freeze, "lib/compony/model_fields/float.rb".freeze, "lib/compony/model_fields/integer.rb".freeze, "lib/compony/model_fields/percentage.rb".freeze, "lib/compony/model_fields/phone.rb".freeze, "lib/compony/model_fields/rich_text.rb".freeze, "lib/compony/model_fields/string.rb".freeze, "lib/compony/model_fields/text.rb".freeze, "lib/compony/model_fields/time.rb".freeze, "lib/compony/model_fields/url.rb".freeze, "lib/compony/model_mixin.rb".freeze, "lib/compony/request_context.rb".freeze, "lib/compony/version.rb".freeze, "lib/compony/view_helpers.rb".freeze, "lib/generators/component/USAGE".freeze, "lib/generators/component/component_generator.rb".freeze, "lib/generators/component/templates/component.rb.erb".freeze, "lib/generators/component/templates/destroy.rb.erb".freeze, "lib/generators/component/templates/edit.rb.erb".freeze, "lib/generators/component/templates/form.rb.erb".freeze, "lib/generators/component/templates/new.rb.erb".freeze, "lib/generators/components/USAGE".freeze, "lib/generators/components/components_generator.rb".freeze]
16
16
  s.required_ruby_version = Gem::Requirement.new(">= 3.0.0".freeze)
17
- s.rubygems_version = "3.4.19".freeze
17
+ s.rubygems_version = "3.4.21".freeze
18
18
  s.summary = "Needs summary".freeze
19
19
 
20
20
  s.specification_version = 4
21
21
 
22
- s.add_development_dependency(%q<yard>.freeze, [">= 0.9.28"])
23
- s.add_development_dependency(%q<rubocop>.freeze, [">= 1.48"])
24
- s.add_development_dependency(%q<rubocop-rails>.freeze, [">= 2.18.0"])
25
- s.add_runtime_dependency(%q<request_store>.freeze, [">= 1.5"])
26
- s.add_runtime_dependency(%q<dyny>.freeze, [">= 0.0.3"])
27
- s.add_runtime_dependency(%q<schemacop>.freeze, [">= 3.0.17"])
28
- s.add_runtime_dependency(%q<simple_form>.freeze, [">= 5.1.0"])
29
- s.add_runtime_dependency(%q<dslblend>.freeze, [">= 0.0.3"])
30
- s.add_runtime_dependency(%q<anchormodel>.freeze, ["~> 0.1.2"])
31
- s.add_runtime_dependency(%q<cancancan>.freeze, ["~> 3.4.0"])
22
+ s.add_development_dependency(%q<yard>.freeze, [">= 0.9.28".freeze])
23
+ s.add_development_dependency(%q<rubocop>.freeze, [">= 1.48".freeze])
24
+ s.add_development_dependency(%q<rubocop-rails>.freeze, [">= 2.18.0".freeze])
25
+ s.add_runtime_dependency(%q<rails>.freeze, [">= 7.1.2".freeze])
26
+ s.add_runtime_dependency(%q<request_store>.freeze, [">= 1.5".freeze])
27
+ s.add_runtime_dependency(%q<dyny>.freeze, [">= 0.0.3".freeze])
28
+ s.add_runtime_dependency(%q<schemacop>.freeze, [">= 3.0.17".freeze])
29
+ s.add_runtime_dependency(%q<simple_form>.freeze, [">= 5.1.0".freeze])
30
+ s.add_runtime_dependency(%q<dslblend>.freeze, [">= 0.0.3".freeze])
31
+ s.add_runtime_dependency(%q<anchormodel>.freeze, ["~> 0.1.2".freeze])
32
+ s.add_runtime_dependency(%q<cancancan>.freeze, ["~> 3.4.0".freeze])
32
33
  end
@@ -152,7 +152,7 @@ module Compony
152
152
  # Call before_render hook if any and backfire instance variables back to the component
153
153
  RequestContext.new(self, controller, locals:).request_context.evaluate_with_backfire(&@before_render_block) if @before_render_block
154
154
  # Render, unless before_render has already issued a body (e.g. through redirecting).
155
- if controller.response.body.blank?
155
+ if controller.response_body.nil?
156
156
  fail "#{self.class.inspect} must define `content` or set a response body in `before_render`" if @content_blocks.none?
157
157
  return controller.render_to_string(
158
158
  type: :dyny,
@@ -43,12 +43,10 @@ module Compony
43
43
 
44
44
  store_data do
45
45
  # Validate params against the form's schema
46
- local_data = @data # Capture data for usage in the Schemacop call
47
46
  schema = Schemacop::Schema3.new :hash, additional_properties: true do
48
- if local_data.class.primary_key_type_key == :string
49
- str! :id
50
- else
51
- int! :id, cast_str: true
47
+ any_of! :id do
48
+ str
49
+ int cast_str: true
52
50
  end
53
51
  end
54
52
  schema.validate!(controller.request.params)
@@ -44,10 +44,9 @@ module Compony
44
44
  local_form_comp = form_comp # Capture form_comp for usage in the Schemacop call
45
45
  local_data = @data # Capture data for usage in the Schemacop call
46
46
  schema = Schemacop::Schema3.new :hash, additional_properties: true do
47
- if local_data.class.primary_key_type_key == :string
48
- str! :id
49
- else
50
- int! :id, cast_str: true
47
+ any_of! :id do
48
+ str
49
+ int cast_str: true
51
50
  end
52
51
  hsh? local_form_comp.schema_wrapper_key_for(local_data), &local_form_comp.schema_block_for(local_data)
53
52
  end
@@ -1,13 +1,15 @@
1
+ module ::Components; end
2
+
1
3
  module Compony
2
4
  class Engine < Rails::Engine
3
5
  initializer 'compony.configure_eager_load_paths', before: :load_environment_hook, group: :all do
4
6
  # Allow app/components/foo/bar.rb to define constants Components::Foo::Bar and make sure components are eager loaded (needed for route generation etc.)
5
- Rails.application.config.eager_load_paths.delete(Rails.root.join('app', 'components').to_s)
6
- Rails.application.config.eager_load_paths.unshift(Rails.root.join('app').to_s)
7
-
8
- # Prevent *.rb files in assets and views directories to be loaded
9
- Rails.autoloaders.main.ignore(Rails.root.join('app', 'assets').to_s)
10
- Rails.autoloaders.main.ignore(Rails.root.join('app', 'views').to_s)
7
+ Rails.autoloaders.main.push_dir(Rails.root.join('app', 'components'), namespace: ::Components)
8
+ unless Rails.application.config.eager_load
9
+ Rails.application.config.to_prepare do
10
+ Rails.autoloaders.main.eager_load_dir(Rails.root.join('app', 'components'))
11
+ end
12
+ end
11
13
  end
12
14
 
13
15
  initializer 'compony.controller_mixin' do
@@ -24,27 +24,20 @@ module Compony
24
24
 
25
25
  def schema_line
26
26
  local_schema_key = @schema_key # Capture schema_key as it will not be available within the lambda
27
- target_primary_key_type = @target_class.primary_key_type_key
28
27
  if multi?
29
28
  return proc do
30
29
  ary? local_schema_key do
31
- if target_primary_key_type == :integer
32
- list :integer, cast_str: true
33
- elsif target_primary_key_type == :string
34
- list :string
35
- else
36
- fail("Unsupported target primary_key_type_key #{target_primary_key_type}")
30
+ list :any_of do
31
+ int cast_str: true
32
+ str
37
33
  end
38
34
  end
39
35
  end
40
36
  else
41
37
  return proc do
42
- if target_primary_key_type == :integer
43
- int? local_schema_key, cast_str: true
44
- elsif target_primary_key_type == :string
45
- str? local_schema_key
46
- else
47
- fail("Unsupported target primary_key_type_key #{target_primary_key_type}")
38
+ any_of? local_schema_key do
39
+ str
40
+ int cast_str: true
48
41
  end
49
42
  end
50
43
  end
@@ -66,11 +59,8 @@ module Compony
66
59
  @association = true
67
60
  association_info = @model_class.reflect_on_association(@name) || fail("Association #{@name.inspect} does not exist for #{@model_class.inspect}.")
68
61
  @multi = association_info.macro == :has_many
69
- @target_class = association_info.klass
70
62
  id_name = "#{@name.to_s.singularize}_id"
71
63
  @schema_key = @multi ? id_name.pluralize.to_sym : id_name.to_sym
72
- rescue ActiveRecord::NoDatabaseError
73
- Rails.logger.warn('Warning: Compony could not auto-detect fields due to missing database. This is ok when running db:create.')
74
64
  end
75
65
  end
76
66
  end
@@ -5,7 +5,6 @@ module Compony
5
5
  included do
6
6
  class_attribute :fields, default: {}
7
7
  class_attribute :feasibility_preventions, default: {}
8
- class_attribute :primary_key_type_key, default: :integer
9
8
  class_attribute :owner_model_attr
10
9
 
11
10
  class_attribute :autodetect_feasibilities_completed, default: false
@@ -27,14 +26,6 @@ module Compony
27
26
  fields[name] = Compony.model_field_class_for(type.to_s.camelize).new(name, self, **extra_attrs)
28
27
  end
29
28
 
30
- # DSL method, sets the primary key type
31
- def primary_key_type(new_type)
32
- unless %i[integer string].include?(new_type.to_sym)
33
- fail("#{self} is declaring primary_key_type as #{new_type.inspect} but only :integer and :string are supported at this time.")
34
- end
35
- self.primary_key_type_key = new_type.to_sym
36
- end
37
-
38
29
  # DSL method, sets the containing model.
39
30
  # Use this when a model only makes sense within the context of another model and typically has no own index page.
40
31
  # For instance, a model LineItem that belongs_to :invoice would typically be owned_by :invoice.
@@ -1,8 +1,8 @@
1
1
  module Compony
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 0
5
- PATCH = 9
4
+ MINOR = 1
5
+ PATCH = 1
6
6
 
7
7
  EDGE = false
8
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: compony
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Kalbermatter
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-11-03 00:00:00.000000000 Z
12
+ date: 2023-11-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: 2.18.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: rails
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 7.1.2
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 7.1.2
56
70
  - !ruby/object:Gem::Dependency
57
71
  name: request_store
58
72
  requirement: !ruby/object:Gem::Requirement