compony 0.0.8 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 328b6b6671f93fa0575bf4224a5da90fecde74a0c00430346d36ca45a675cf24
4
- data.tar.gz: a92107d9f9cf7b270d57059ad10bdec614d269615fd2eabfe58caeb0e44300bc
3
+ metadata.gz: cb0673f11b76f52d4405874d3efc5d36c5711a7cd563cd5029df63893b8cbefb
4
+ data.tar.gz: '0196fe47b074ce2854ba847ed2064fbcc94946c221ed1ea8521b727d733f6deb'
5
5
  SHA512:
6
- metadata.gz: 1ae81390416e9f14dcfb1a1d2723fbd3714e4f271afe9dc9e2a3ee2f27012a1ee82cb846fb8b80be14b6fac73451477b9b8e00a960b8f88777670a10e4dcec13
7
- data.tar.gz: d318c0bdc852f4ff1fcf1aef638eac97356a03621f70bb4bac7957bece7050ba5e152a4114d165c79200d3e2eefe6d61af69ac4fec10371da354f908164ab929
6
+ metadata.gz: 9f2f3c18aebe32eba38249171af0eb0d5a2a27b2bebeee71c8ced5555ec2755d1e65997d3e467a8f94563c64e2fdd7ad7aee5c80fde3e67c8e5e6a1c6333c6ca
7
+ data.tar.gz: '080f57ca5947d0ae472b5cea6789aea66435064ebd356c63e797bdfbd69174c25baf9b6cf4c5895a6501a2231b34f952523d8c1d87d91c1a0d73b840f4782753'
data/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ # 0.1.0
2
+
3
+ - Remove (hopefully) obsolete database safeguard in `resolve_association!` as we should no longer be accessing the DB.
4
+ - BREAKING: Remove `primary_key_type` and tolerate int and str as primary and foreign key in all params.
5
+ - This fixes a bug introduced in 0.0.10 breaking polymorphic relations.
6
+ - Support Rails 7.1
7
+ - No longer rely on `controller.response.body.blank?` but use `controller.response_body.nil?` instead
8
+
9
+ ## Steps to perform
10
+
11
+ - Remove any calls to `primary_key_type`
12
+
13
+ # 0.0.9
14
+
15
+ - Support forms with references to tables with uuid type primary key
16
+ - Support for `owned_by` in model:
17
+ - Smart redirect
18
+ - Auto-generate a back / cancel button
19
+ - Add `clear_standalone!` to components
20
+ - Allow passing an array to `prevent` to prevent multiple actions at once
21
+ - Add features `Compony.content_before_root_comp` and `Compony.content_after_root_comp`
22
+ - Add new field kind percentage
23
+
24
+ ## KNOWN BUGS
25
+
26
+ - This version breaks polymorphic relations.
27
+
1
28
  # 0.0.8
2
29
 
3
30
  - 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.1)
4
+ compony (0.0.9)
5
5
  anchormodel (~> 0.1.2)
6
6
  cancancan (~> 3.4.0)
7
7
  dslblend (>= 0.0.3)
@@ -203,4 +203,4 @@ DEPENDENCIES
203
203
  yard (>= 0.9.28)
204
204
 
205
205
  BUNDLED WITH
206
- 2.4.13
206
+ 2.4.19
data/compony.gemspec CHANGED
@@ -2,31 +2,31 @@
2
2
  # This file is auto-generated via: 'rake gemspec'.
3
3
 
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: compony 0.0.8 ruby lib
5
+ # stub: compony 0.1.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "compony".freeze
9
- s.version = "0.0.8"
9
+ s.version = "0.1.0".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-10-03"
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/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]
14
+ s.date = "2023-11-06"
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<request_store>.freeze, [">= 1.5".freeze])
26
+ s.add_runtime_dependency(%q<dyny>.freeze, [">= 0.0.3".freeze])
27
+ s.add_runtime_dependency(%q<schemacop>.freeze, [">= 3.0.17".freeze])
28
+ s.add_runtime_dependency(%q<simple_form>.freeze, [">= 5.1.0".freeze])
29
+ s.add_runtime_dependency(%q<dslblend>.freeze, [">= 0.0.3".freeze])
30
+ s.add_runtime_dependency(%q<anchormodel>.freeze, ["~> 0.1.2".freeze])
31
+ s.add_runtime_dependency(%q<cancancan>.freeze, ["~> 3.4.0".freeze])
32
32
  end
@@ -1,5 +1,6 @@
1
1
  de:
2
2
  compony:
3
+ cancel: 'Abbrechen'
3
4
  filtered: '[Filtered]' # Not translated as this appears in log
4
5
  boolean:
5
6
  true: 'Ja'
@@ -1,5 +1,6 @@
1
1
  en:
2
2
  compony:
3
+ cancel: 'Cancel'
3
4
  filtered: '[Filtered]'
4
5
  boolean:
5
6
  yes: 'Yes'
@@ -146,21 +146,28 @@ module Compony
146
146
  end
147
147
 
148
148
  # Renders the component using the controller passsed to it and returns it as a string.
149
+ # @param standalone: pass true iff `render` is called from `render_standalone`
149
150
  # Do not overwrite.
150
- def render(controller, **locals)
151
+ def render(controller, standalone: false, **locals)
151
152
  # Call before_render hook if any and backfire instance variables back to the component
152
153
  RequestContext.new(self, controller, locals:).request_context.evaluate_with_backfire(&@before_render_block) if @before_render_block
153
154
  # Render, unless before_render has already issued a body (e.g. through redirecting).
154
- if controller.response.body.blank?
155
+ if controller.response_body.nil?
155
156
  fail "#{self.class.inspect} must define `content` or set a response body in `before_render`" if @content_blocks.none?
156
157
  return controller.render_to_string(
157
158
  type: :dyny,
158
- locals: { content_blocks: @content_blocks, component: self, render_locals: locals },
159
+ locals: { content_blocks: @content_blocks, standalone:, component: self, render_locals: locals },
159
160
  inline: <<~RUBY
161
+ if Compony.content_before_root_comp_block && standalone
162
+ Compony::RequestContext.new(component, controller, helpers: self, locals: render_locals).evaluate(&Compony.content_before_root_comp_block)
163
+ end
160
164
  content_blocks.each do |block|
161
165
  # Instanciate and evaluate a fresh RequestContext in order to use the buffer allocated by the ActionView (needed for `concat` calls)
162
166
  Compony::RequestContext.new(component, controller, helpers: self, locals: render_locals).evaluate(&block)
163
167
  end
168
+ if Compony.content_after_root_comp_block && standalone
169
+ Compony::RequestContext.new(component, controller, helpers: self, locals: render_locals).evaluate(&Compony.content_after_root_comp_block)
170
+ end
164
171
  RUBY
165
172
  )
166
173
  else
@@ -88,7 +88,7 @@ module Compony
88
88
  # Do not overwrite
89
89
  def render_standalone(controller, status: nil, standalone_name: nil)
90
90
  # Start the render process. This produces a nil value if before_render has already produced a response, e.g. a redirect.
91
- rendered_html = render(controller)
91
+ rendered_html = render(controller, standalone: true)
92
92
  if rendered_html.present? # If nil, a response body was already produced in the controller and we take no action here (would have DoubleRenderError)
93
93
  opts = { html: rendered_html, layout: @standalone_configs[standalone_name].layout }
94
94
  opts[:status] = status if status.present?
@@ -111,6 +111,11 @@ module Compony
111
111
  @standalone_configs[name].deep_merge! StandaloneDsl.new(self, name, *args, **nargs).to_conf(&block)
112
112
  end
113
113
 
114
+ # Undoes previous standalone calls
115
+ def clear_standalone!
116
+ @standalone_configs = {}
117
+ end
118
+
114
119
  private
115
120
 
116
121
  def init_standalone
@@ -36,14 +36,17 @@ module Compony
36
36
  end
37
37
  end
38
38
 
39
+ action :back_to_owner do
40
+ next if data_class.owner_model_attr.blank?
41
+ Compony.button(:show, @data.send(data_class.owner_model_attr), icon: :xmark, color: :secondary, label: I18n.t('compony.cancel'))
42
+ end
43
+
39
44
  store_data do
40
45
  # Validate params against the form's schema
41
- local_data = @data # Capture data for usage in the Schemacop call
42
46
  schema = Schemacop::Schema3.new :hash, additional_properties: true do
43
- if local_data.class.primary_key_type_key == :string
44
- str! :id
45
- else
46
- int! :id, cast_str: true
47
+ any_of! :id do
48
+ str
49
+ int cast_str: true
47
50
  end
48
51
  end
49
52
  schema.validate!(controller.request.params)
@@ -58,7 +61,11 @@ module Compony
58
61
  end
59
62
 
60
63
  on_destroyed_redirect_path do
61
- Compony.path(:index, family_cst)
64
+ if data_class.owner_model_attr.present?
65
+ Compony.path(:show, @data.send(data_class.owner_model_attr))
66
+ else
67
+ Compony.path(:index, family_cst)
68
+ end
62
69
  end
63
70
  end
64
71
 
@@ -30,6 +30,11 @@ module Compony
30
30
  label(:short) { |_| I18n.t('compony.components.edit.label.short') }
31
31
  icon { :pencil }
32
32
 
33
+ action :back_to_owner do
34
+ next if data_class.owner_model_attr.blank?
35
+ Compony.button(:show, @data.send(data_class.owner_model_attr), icon: :xmark, color: :secondary, label: I18n.t('compony.cancel'))
36
+ end
37
+
33
38
  content do
34
39
  concat form_comp.render(controller, data: @data)
35
40
  end
@@ -39,10 +44,9 @@ module Compony
39
44
  local_form_comp = form_comp # Capture form_comp for usage in the Schemacop call
40
45
  local_data = @data # Capture data for usage in the Schemacop call
41
46
  schema = Schemacop::Schema3.new :hash, additional_properties: true do
42
- if local_data.class.primary_key_type_key == :string
43
- str! :id
44
- else
45
- int! :id, cast_str: true
47
+ any_of! :id do
48
+ str
49
+ int cast_str: true
46
50
  end
47
51
  hsh? local_form_comp.schema_wrapper_key_for(local_data), &local_form_comp.schema_block_for(local_data)
48
52
  end
@@ -65,6 +69,8 @@ module Compony
65
69
  on_updated_redirect_path do
66
70
  if Compony.comp_class_for(:show, @data)
67
71
  Compony.path(:show, @data)
72
+ elsif data_class.owner_model_attr.present?
73
+ Compony.path(:show, @data.send(data_class.owner_model_attr))
68
74
  else
69
75
  Compony.path(:index, @data)
70
76
  end
@@ -64,6 +64,8 @@ module Compony
64
64
  on_created_redirect_path do
65
65
  if Compony.comp_class_for(:show, @data)
66
66
  Compony.path(:show, @data)
67
+ elsif data_class.owner_model_attr.present?
68
+ Compony.path(:show, @data.send(data_class.owner_model_attr))
67
69
  else
68
70
  Compony.path(:index, @data)
69
71
  end
@@ -27,12 +27,18 @@ module Compony
27
27
  if multi?
28
28
  return proc do
29
29
  ary? local_schema_key do
30
- list :integer, cast_str: true
30
+ list :any_of do
31
+ int cast_str: true
32
+ str
33
+ end
31
34
  end
32
35
  end
33
36
  else
34
37
  return proc do
35
- int? local_schema_key, cast_str: true
38
+ any_of? local_schema_key do
39
+ str
40
+ int cast_str: true
41
+ end
36
42
  end
37
43
  end
38
44
  end
@@ -55,8 +61,6 @@ module Compony
55
61
  @multi = association_info.macro == :has_many
56
62
  id_name = "#{@name.to_s.singularize}_id"
57
63
  @schema_key = @multi ? id_name.pluralize.to_sym : id_name.to_sym
58
- rescue ActiveRecord::NoDatabaseError
59
- Rails.logger.warn('Warning: Compony could not auto-detect fields due to missing database. This is ok when running db:create.')
60
64
  end
61
65
  end
62
66
  end
@@ -0,0 +1,9 @@
1
+ module Compony
2
+ module ModelFields
3
+ class Percentage < Base
4
+ def value_for(data, controller: nil, **_)
5
+ return transform_and_join(data.send(@name), controller:) { |el| controller.helpers.sanitize "#{(el * 100.0).round(2)}%" }
6
+ end
7
+ end
8
+ end
9
+ end
@@ -5,7 +5,7 @@ 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
8
+ class_attribute :owner_model_attr
9
9
 
10
10
  class_attribute :autodetect_feasibilities_completed, default: false
11
11
  end
@@ -26,20 +26,23 @@ module Compony
26
26
  fields[name] = Compony.model_field_class_for(type.to_s.camelize).new(name, self, **extra_attrs)
27
27
  end
28
28
 
29
- # DSL method, sets the primary key type
30
- def primary_key_type(new_type)
31
- unless %i[integer string].include?(new_type.to_sym)
32
- fail("#{self} is declaring primary_key_type as #{new_type.inspect} but only :integer and :string are supported at this time.")
33
- end
34
- self.primary_key_type_key = new_type.to_sym
29
+ # DSL method, sets the containing model.
30
+ # Use this when a model only makes sense within the context of another model and typically has no own index page.
31
+ # For instance, a model LineItem that belongs_to :invoice would typically be owned_by :invoice.
32
+ # Compony will automatically adjust Redirects and top actions.
33
+ def owned_by(attribute_name)
34
+ self.owner_model_attr = attribute_name.to_sym
35
35
  end
36
36
 
37
37
  # DSL method, part of the Feasibility feature
38
38
  # Block must return `false` if the action should be prevented.
39
- def prevent(action_name, message, &block)
40
- self.feasibility_preventions = feasibility_preventions.dup # Prevent cross-class contamination
41
- feasibility_preventions[action_name.to_sym] ||= []
42
- feasibility_preventions[action_name.to_sym] << MethodAccessibleHash.new(action_name:, message:, block:)
39
+ def prevent(action_names, message, &block)
40
+ action_names = [action_names] unless action_names.is_a? Enumerable
41
+ action_names.each do |action_name|
42
+ self.feasibility_preventions = feasibility_preventions.dup # Prevent cross-class contamination
43
+ feasibility_preventions[action_name.to_sym] ||= []
44
+ feasibility_preventions[action_name.to_sym] << MethodAccessibleHash.new(action_name:, message:, block:)
45
+ end
43
46
  end
44
47
 
45
48
  # DSL method, part of the Feasibility feature
@@ -1,8 +1,8 @@
1
1
  module Compony
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 0
5
- PATCH = 8
4
+ MINOR = 1
5
+ PATCH = 0
6
6
 
7
7
  EDGE = false
8
8
 
data/lib/compony.rb CHANGED
@@ -40,6 +40,20 @@ module Compony
40
40
  @authentication_before_action = authentication_before_action.to_sym
41
41
  end
42
42
 
43
+ # Setter for a content block that runs before the root component gets rendered (standalone only). Usage is the same as `content`.
44
+ # The block runs between `before_render` and `render`, i.e. before the first `content` block.
45
+ def self.content_before_root_comp(&block)
46
+ fail('`Compony.content_before` requires a block.') unless block_given?
47
+ @content_before_root_comp_block = block
48
+ end
49
+
50
+ # Setter for a content block that runs after the root component gets rendered (standalone only). Usage is the same as `content`.
51
+ # The block runs after `render`, i.e. after the last `content` block.
52
+ def self.content_after_root_comp(&block)
53
+ fail('`Compony.content_after` requires a block.') unless block_given?
54
+ @content_after_root_comp_block = block
55
+ end
56
+
43
57
  ##########=====-------
44
58
  # Configuration readers
45
59
  ##########=====-------
@@ -64,6 +78,18 @@ module Compony
64
78
  @authentication_before_action
65
79
  end
66
80
 
81
+ # Getter for content_before_root_comp_block
82
+ # @see Compony#content_before_root_comp
83
+ def self.content_before_root_comp_block
84
+ @content_before_root_comp_block
85
+ end
86
+
87
+ # Getter for content_after_root_comp_block
88
+ # @see Compony#content_after_root_comp
89
+ def self.content_after_root_comp_block
90
+ @content_after_root_comp_block
91
+ end
92
+
67
93
  ##########=====-------
68
94
  # Application-wide available pure helpers
69
95
  ##########=====-------
@@ -253,6 +279,7 @@ require 'compony/model_fields/decimal'
253
279
  require 'compony/model_fields/email'
254
280
  require 'compony/model_fields/float'
255
281
  require 'compony/model_fields/integer'
282
+ require 'compony/model_fields/percentage'
256
283
  require 'compony/model_fields/phone'
257
284
  require 'compony/model_fields/rich_text'
258
285
  require 'compony/model_fields/string'
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.8
4
+ version: 0.1.0
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-10-03 00:00:00.000000000 Z
12
+ date: 2023-11-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard
@@ -203,6 +203,7 @@ files:
203
203
  - lib/compony/model_fields/email.rb
204
204
  - lib/compony/model_fields/float.rb
205
205
  - lib/compony/model_fields/integer.rb
206
+ - lib/compony/model_fields/percentage.rb
206
207
  - lib/compony/model_fields/phone.rb
207
208
  - lib/compony/model_fields/rich_text.rb
208
209
  - lib/compony/model_fields/string.rb