clean-architecture 5.0.2 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +15 -19
- data/.gitignore +4 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +1 -0
- data/README.md +1 -585
- data/bin/tapioca +29 -0
- data/clean-architecture.gemspec +4 -4
- data/lib/clean-architecture.rb +4 -1
- data/lib/clean_architecture/adapters/all.rb +1 -1
- data/lib/clean_architecture/adapters/attribute_hash_base.rb +47 -20
- data/lib/clean_architecture/all.rb +1 -4
- data/lib/clean_architecture/builders/abstract_active_record_entity_builder.rb +43 -13
- data/lib/clean_architecture/builders/all.rb +1 -1
- data/lib/clean_architecture/checks/all.rb +1 -1
- data/lib/clean_architecture/checks/authorization.rb +11 -9
- data/lib/clean_architecture/entities/all.rb +1 -3
- data/lib/clean_architecture/entities/failure_details.rb +27 -17
- data/lib/clean_architecture/matchers/all.rb +1 -1
- data/lib/clean_architecture/matchers/use_case_result.rb +9 -3
- data/lib/clean_architecture/queries/all.rb +1 -1
- data/lib/clean_architecture/queries/http_failure_code.rb +8 -20
- data/lib/clean_architecture/queries/http_success_code.rb +14 -7
- data/lib/clean_architecture/serializers/all.rb +1 -1
- data/lib/clean_architecture/serializers/html_response_from_result.rb +7 -1
- data/lib/clean_architecture/serializers/json_response_from_result.rb +4 -4
- data/lib/clean_architecture/version.rb +1 -1
- data/nix/sources.json +14 -0
- data/nix/sources.nix +174 -0
- data/run_ci.sh +7 -0
- data/shell.nix +17 -12
- data/sorbet/config +4 -0
- data/sorbet/{rbi/gems → dry-monads-sorbet}/dry-monads.rbi +176 -94
- data/sorbet/rbi/gems/activemodel@6.1.4.1.rbi +1292 -0
- data/sorbet/rbi/gems/activerecord@6.1.4.1.rbi +8092 -0
- data/sorbet/rbi/gems/activesupport@6.1.4.1.rbi +3531 -0
- data/sorbet/rbi/gems/{ast.rbi → ast@2.4.2.rbi} +28 -22
- data/sorbet/rbi/gems/byebug@11.1.3.rbi +1568 -0
- data/sorbet/rbi/gems/coderay@1.1.3.rbi +1005 -0
- data/sorbet/rbi/gems/concurrent-ruby@1.1.9.rbi +915 -0
- data/sorbet/rbi/gems/diff-lcs@1.4.4.rbi +8 -0
- data/sorbet/rbi/gems/docile@1.4.0.rbi +54 -0
- data/sorbet/rbi/gems/dry-core@0.7.1.rbi +92 -0
- data/sorbet/rbi/gems/dry-equalizer@0.3.0.rbi +28 -0
- data/sorbet/rbi/gems/dry-matcher@0.9.0.rbi +56 -0
- data/sorbet/rbi/gems/dry-monads-sorbet@1.1.7.rbi +41 -0
- data/sorbet/rbi/gems/dry-monads@1.4.0.rbi +697 -0
- data/sorbet/rbi/gems/em-websocket@0.5.2.rbi +8 -0
- data/sorbet/rbi/gems/eventmachine@1.2.7.rbi +45 -0
- data/sorbet/rbi/gems/ffi@1.15.4.rbi +8 -0
- data/sorbet/rbi/gems/formatador@0.3.0.rbi +8 -0
- data/sorbet/rbi/gems/guard-compat@1.2.1.rbi +31 -0
- data/sorbet/rbi/gems/guard-livereload@2.5.2.rbi +8 -0
- data/sorbet/rbi/gems/guard-rspec@4.7.3.rbi +211 -0
- data/sorbet/rbi/gems/guard@2.18.0.rbi +8 -0
- data/sorbet/rbi/gems/http_parser.rb@0.6.0.rbi +8 -0
- data/sorbet/rbi/gems/i18n@1.8.10.rbi +8 -0
- data/sorbet/rbi/gems/listen@3.7.0.rbi +8 -0
- data/sorbet/rbi/gems/lumberjack@1.2.8.rbi +8 -0
- data/sorbet/rbi/gems/method_source@1.0.0.rbi +72 -0
- data/sorbet/rbi/gems/minitest@5.14.4.rbi +344 -0
- data/sorbet/rbi/gems/multi_json@1.15.0.rbi +8 -0
- data/sorbet/rbi/gems/nenv@0.3.0.rbi +8 -0
- data/sorbet/rbi/gems/notiffany@0.1.3.rbi +8 -0
- data/sorbet/rbi/gems/parallel@1.21.0.rbi +113 -0
- data/sorbet/rbi/gems/{parser.rbi → parser@3.0.2.0.rbi} +966 -699
- data/sorbet/rbi/gems/pry-byebug@3.9.0.rbi +461 -0
- data/sorbet/rbi/gems/{pry.rbi → pry@0.13.1.rbi} +2191 -1605
- data/sorbet/rbi/gems/{rainbow.rbi → rainbow@3.0.0.rbi} +90 -55
- data/sorbet/rbi/gems/{rake.rbi → rake@13.0.6.rbi} +578 -427
- data/sorbet/rbi/gems/rb-fsevent@0.11.0.rbi +8 -0
- data/sorbet/rbi/gems/rb-inotify@0.10.1.rbi +8 -0
- data/sorbet/rbi/gems/rb-readline@0.5.5.rbi +884 -0
- data/sorbet/rbi/gems/rbi@0.0.6.rbi +1405 -0
- data/sorbet/rbi/gems/regexp_parser@2.1.1.rbi +1120 -0
- data/sorbet/rbi/gems/{rexml.rbi → rexml@3.2.5.rbi} +562 -479
- data/sorbet/rbi/gems/{rspec-core.rbi → rspec-core@3.10.1.rbi} +2317 -1533
- data/sorbet/rbi/gems/rspec-expectations@3.10.1.rbi +1574 -0
- data/sorbet/rbi/gems/rspec-mocks@3.10.2.rbi +1462 -0
- data/sorbet/rbi/gems/rspec-support@3.10.2.rbi +509 -0
- data/sorbet/rbi/gems/rspec@3.10.0.rbi +38 -0
- data/sorbet/rbi/gems/rubocop-ast@1.12.0.rbi +1938 -0
- data/sorbet/rbi/gems/rubocop-rspec@2.5.0.rbi +1786 -0
- data/sorbet/rbi/gems/rubocop@1.22.1.rbi +13252 -0
- data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +405 -0
- data/sorbet/rbi/gems/shellany@0.0.1.rbi +8 -0
- data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +89 -0
- data/sorbet/rbi/gems/simplecov@0.21.2.rbi +577 -0
- data/sorbet/rbi/gems/simplecov_json_formatter@0.1.3.rbi +8 -0
- data/sorbet/rbi/gems/sorbet-struct-comparable@1.1.0.rbi +17 -0
- data/sorbet/rbi/gems/spoom@1.1.5.rbi +1241 -0
- data/sorbet/rbi/gems/stackprof@0.2.17.rbi +98 -0
- data/sorbet/rbi/gems/tapioca@0.5.2.rbi +949 -0
- data/sorbet/rbi/gems/thor@1.1.0.rbi +839 -0
- data/sorbet/rbi/gems/tzinfo@2.0.4.rbi +8 -0
- data/sorbet/rbi/gems/unicode-display_width@2.1.0.rbi +26 -0
- data/sorbet/rbi/gems/unparser@0.6.0.rbi +8 -0
- data/sorbet/rbi/gems/zeitwerk@2.4.2.rbi +8 -0
- data/sorbet/tapioca/require.rb +9 -0
- metadata +88 -91
- data/.ruby-version +0 -1
- data/lib/clean_architecture/entities/targeted_parameters.rb +0 -24
- data/lib/clean_architecture/entities/untargeted_parameters.rb +0 -21
- data/lib/clean_architecture/interfaces/all.rb +0 -12
- data/lib/clean_architecture/interfaces/authorization_parameters.rb +0 -19
- data/lib/clean_architecture/interfaces/base_parameters.rb +0 -24
- data/lib/clean_architecture/interfaces/jsonable.rb +0 -16
- data/lib/clean_architecture/interfaces/targeted_parameters.rb +0 -19
- data/lib/clean_architecture/interfaces/use_case.rb +0 -20
- data/lib/clean_architecture/interfaces/use_case_actor.rb +0 -20
- data/lib/clean_architecture/interfaces/use_case_target.rb +0 -24
- data/lib/clean_architecture/types.rb +0 -8
- data/lib/clean_architecture/use_cases/abstract_use_case.rb +0 -63
- data/lib/clean_architecture/use_cases/all.rb +0 -10
- data/lib/clean_architecture/use_cases/contract.rb +0 -9
- data/lib/clean_architecture/use_cases/errors.rb +0 -58
- data/lib/clean_architecture/use_cases/form.rb +0 -116
- data/lib/clean_architecture/use_cases/parameters.rb +0 -43
- data/sorbet/rbi/gems/activemodel.rbi +0 -75
- data/sorbet/rbi/gems/activesupport.rbi +0 -440
- data/sorbet/rbi/gems/byebug.rbi +0 -1040
- data/sorbet/rbi/gems/coderay.rbi +0 -92
- data/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1586
- data/sorbet/rbi/gems/docile.rbi +0 -32
- data/sorbet/rbi/gems/dry-configurable.rbi +0 -139
- data/sorbet/rbi/gems/dry-container.rbi +0 -89
- data/sorbet/rbi/gems/dry-core.rbi +0 -80
- data/sorbet/rbi/gems/dry-equalizer.rbi +0 -26
- data/sorbet/rbi/gems/dry-inflector.rbi +0 -73
- data/sorbet/rbi/gems/dry-initializer.rbi +0 -209
- data/sorbet/rbi/gems/dry-logic.rbi +0 -305
- data/sorbet/rbi/gems/dry-matcher.rbi +0 -34
- data/sorbet/rbi/gems/dry-schema.rbi +0 -786
- data/sorbet/rbi/gems/dry-struct.rbi +0 -137
- data/sorbet/rbi/gems/dry-types.rbi +0 -709
- data/sorbet/rbi/gems/dry-validation.rbi +0 -288
- data/sorbet/rbi/gems/duckface-interfaces.rbi +0 -94
- data/sorbet/rbi/gems/i18n.rbi +0 -133
- data/sorbet/rbi/gems/jaro_winkler.rbi +0 -15
- data/sorbet/rbi/gems/method_source.rbi +0 -64
- data/sorbet/rbi/gems/parallel.rbi +0 -82
- data/sorbet/rbi/gems/pry-byebug.rbi +0 -155
- data/sorbet/rbi/gems/rb-readline.rbi +0 -767
- data/sorbet/rbi/gems/rspec-expectations.rbi +0 -398
- data/sorbet/rbi/gems/rspec-mocks.rbi +0 -816
- data/sorbet/rbi/gems/rspec-support.rbi +0 -271
- data/sorbet/rbi/gems/rspec.rbi +0 -15
- data/sorbet/rbi/gems/rubocop-rspec.rbi +0 -922
- data/sorbet/rbi/gems/rubocop.rbi +0 -7319
- data/sorbet/rbi/gems/ruby-progressbar.rbi +0 -305
- data/sorbet/rbi/gems/simplecov-html.rbi +0 -35
- data/sorbet/rbi/gems/simplecov.rbi +0 -361
- data/sorbet/rbi/gems/stackprof.rbi +0 -52
- data/sorbet/rbi/gems/unicode-display_width.rbi +0 -17
- data/sorbet/rbi/hidden-definitions/errors.txt +0 -8580
- data/sorbet/rbi/hidden-definitions/hidden.rbi +0 -17036
- data/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -452
- data/sorbet/rbi/sorbet-typed/lib/activesupport/>=6.0.0.rc1/activesupport.rbi +0 -23
- data/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -979
- data/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8684
- data/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -108
- data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +0 -276
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/gem.rbi +0 -4222
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
- data/sorbet/rbi/todo.rbi +0 -10
@@ -1,58 +0,0 @@
|
|
1
|
-
# typed: true
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'active_model'
|
5
|
-
require 'active_support/core_ext/string/inflections'
|
6
|
-
require 'forwardable'
|
7
|
-
|
8
|
-
module CleanArchitecture
|
9
|
-
module UseCases
|
10
|
-
# Acts as a facade in front of ActiveModel::Errors implementing the bare minimum of the API
|
11
|
-
# It also implements the same interface as a FailureDetails so as to be interchangeable if
|
12
|
-
# passed back to code expecting a FailureDetails
|
13
|
-
class Errors
|
14
|
-
extend Forwardable
|
15
|
-
include ActiveModel::Translation
|
16
|
-
|
17
|
-
DEFAULT_FAILURE_DETAILS_TYPE = 'error'
|
18
|
-
|
19
|
-
def initialize(base, type = DEFAULT_FAILURE_DETAILS_TYPE)
|
20
|
-
@active_model_errors = ActiveModel::Errors.new(base)
|
21
|
-
@type = type
|
22
|
-
end
|
23
|
-
|
24
|
-
attr_reader :type
|
25
|
-
|
26
|
-
def message
|
27
|
-
full_messages.join(', ')
|
28
|
-
end
|
29
|
-
|
30
|
-
def other_properties
|
31
|
-
{}
|
32
|
-
end
|
33
|
-
|
34
|
-
def_delegators :@active_model_errors,
|
35
|
-
:count,
|
36
|
-
:each,
|
37
|
-
:size,
|
38
|
-
:clear,
|
39
|
-
:blank?,
|
40
|
-
:empty?,
|
41
|
-
:add
|
42
|
-
|
43
|
-
ATTRIBUTE_NAME_HUMANIZE_OPTIONS = { capitalize: true, keep_id_suffix: false }
|
44
|
-
BASE_NAME = :base
|
45
|
-
|
46
|
-
def full_messages
|
47
|
-
@active_model_errors.messages.map do |attribute, messages|
|
48
|
-
attribute_name = if attribute == BASE_NAME
|
49
|
-
nil
|
50
|
-
else
|
51
|
-
ActiveSupport::Inflector.humanize(attribute, ATTRIBUTE_NAME_HUMANIZE_OPTIONS)
|
52
|
-
end
|
53
|
-
messages.map { |message| [attribute_name, message].compact.join(' ') }
|
54
|
-
end.flatten
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,116 +0,0 @@
|
|
1
|
-
# typed: false
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'active_model'
|
5
|
-
require 'clean_architecture/use_cases/errors'
|
6
|
-
require 'clean_architecture/entities/failure_details'
|
7
|
-
require 'dry/struct'
|
8
|
-
require 'dry/monads/try'
|
9
|
-
require 'dry/matcher/result_matcher'
|
10
|
-
|
11
|
-
module CleanArchitecture
|
12
|
-
module UseCases
|
13
|
-
class Form
|
14
|
-
include ActiveModel::Conversion
|
15
|
-
include Dry::Monads::Try::Mixin
|
16
|
-
extend ActiveModel::Naming
|
17
|
-
|
18
|
-
attr_reader :errors, :context
|
19
|
-
|
20
|
-
def initialize(params: {}, context: {}, errors: UseCases::Errors.new(nil))
|
21
|
-
@params = params.to_h.symbolize_keys
|
22
|
-
@context = context
|
23
|
-
@errors = errors
|
24
|
-
end
|
25
|
-
|
26
|
-
def persisted?
|
27
|
-
false
|
28
|
-
end
|
29
|
-
|
30
|
-
# Attempts to create the parameter object returning a Dry::Monads::Result with either
|
31
|
-
# the parameter object or an exception
|
32
|
-
def to_parameter_object
|
33
|
-
@to_parameter_object ||= begin
|
34
|
-
use_case_class.parameters(parameter_object_hash.merge(context: context))
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def with_errors(new_errors, override_params: nil)
|
39
|
-
self.class.new(
|
40
|
-
params: override_params || @params,
|
41
|
-
context: @context,
|
42
|
-
errors: ErrorsFactory.new(new_errors).manufacture
|
43
|
-
)
|
44
|
-
end
|
45
|
-
|
46
|
-
def with_error_message(message, override_params: nil)
|
47
|
-
new_errors = UseCases::Errors.new(nil)
|
48
|
-
new_errors.add(:base, message)
|
49
|
-
with_errors(new_errors, override_params: override_params)
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.acts_as_form_for(use_case_class)
|
53
|
-
attribute_names = use_case_class.contract.__schema__.rules.keys
|
54
|
-
|
55
|
-
attribute_names.each do |attribute_name|
|
56
|
-
define_method attribute_name do
|
57
|
-
to_parameter_object[attribute_name]
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
define_method :use_case_class do
|
62
|
-
use_case_class
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.prepopulate_with(_object, _context)
|
67
|
-
raise NotImplementedError, 'This form does not support prepopulation'
|
68
|
-
end
|
69
|
-
|
70
|
-
private
|
71
|
-
|
72
|
-
def attempt_parameter_object_hash_creation
|
73
|
-
errors.clear
|
74
|
-
parameter_object_hash
|
75
|
-
end
|
76
|
-
|
77
|
-
# This can be overridden for forms where the params don't map perfectly
|
78
|
-
# to the parameter object
|
79
|
-
def parameter_object_hash
|
80
|
-
@params
|
81
|
-
end
|
82
|
-
|
83
|
-
class ErrorsFactory
|
84
|
-
def initialize(errors)
|
85
|
-
@errors = errors
|
86
|
-
end
|
87
|
-
|
88
|
-
def manufacture
|
89
|
-
if @errors.is_a?(UseCases::Errors)
|
90
|
-
return @errors
|
91
|
-
elsif @errors.is_a?(Entities::FailureDetails)
|
92
|
-
return errors_from_failure_details
|
93
|
-
elsif @errors.is_a?(String)
|
94
|
-
return errors_from_string
|
95
|
-
end
|
96
|
-
|
97
|
-
raise ArgumentError, "Unable to handle errors of type: #{@errors.class}"
|
98
|
-
end
|
99
|
-
|
100
|
-
private
|
101
|
-
|
102
|
-
def errors_from_failure_details
|
103
|
-
errors = UseCases::Errors.new(nil)
|
104
|
-
errors.add(:base, @errors.message)
|
105
|
-
errors
|
106
|
-
end
|
107
|
-
|
108
|
-
def errors_from_string
|
109
|
-
errors = UseCases::Errors.new(nil)
|
110
|
-
errors.add(:base, @errors)
|
111
|
-
errors
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# typed: true
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'dry/monads/result'
|
5
|
-
require 'clean_architecture/use_cases/errors'
|
6
|
-
require 'forwardable'
|
7
|
-
|
8
|
-
module CleanArchitecture
|
9
|
-
module UseCases
|
10
|
-
class Parameters
|
11
|
-
include Dry::Monads::Result::Mixin
|
12
|
-
extend Forwardable
|
13
|
-
|
14
|
-
def initialize(context, dry_validation_result)
|
15
|
-
@context = context
|
16
|
-
@dry_validation_result = dry_validation_result
|
17
|
-
end
|
18
|
-
|
19
|
-
def context(key)
|
20
|
-
@context.fetch(key)
|
21
|
-
end
|
22
|
-
|
23
|
-
def_delegators :@dry_validation_result,
|
24
|
-
:[]
|
25
|
-
|
26
|
-
def to_monad
|
27
|
-
@dry_validation_result.success? ? Success(@dry_validation_result.to_h) : Failure(errors)
|
28
|
-
end
|
29
|
-
|
30
|
-
INVALID_PARAMS_FAILURE_TYPE = 'expectation_failed'
|
31
|
-
|
32
|
-
def errors
|
33
|
-
new_errors = Errors.new(nil, INVALID_PARAMS_FAILURE_TYPE)
|
34
|
-
@dry_validation_result.errors.to_h.each_pair do |invalid_attribute_key, error_messages|
|
35
|
-
error_messages.each do |error_message|
|
36
|
-
new_errors.add(invalid_attribute_key, error_message)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
new_errors
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
# This file is autogenerated. Do not edit it by hand. Regenerate it with:
|
2
|
-
# srb rbi gems
|
3
|
-
|
4
|
-
# typed: strong
|
5
|
-
#
|
6
|
-
# If you would like to make changes to this file, great! Please create the gem's shim here:
|
7
|
-
#
|
8
|
-
# https://github.com/sorbet/sorbet-typed/new/master?filename=lib/activemodel/all/activemodel.rbi
|
9
|
-
#
|
10
|
-
# activemodel-6.0.2.1
|
11
|
-
|
12
|
-
module ActiveModel
|
13
|
-
def self.eager_load!; end
|
14
|
-
def self.gem_version; end
|
15
|
-
def self.version; end
|
16
|
-
extend ActiveSupport::Autoload
|
17
|
-
end
|
18
|
-
module ActiveModel::VERSION
|
19
|
-
end
|
20
|
-
module ActiveModel::Serializers
|
21
|
-
extend ActiveSupport::Autoload
|
22
|
-
end
|
23
|
-
class ActiveModel::Name
|
24
|
-
def !~(*args, &block); end
|
25
|
-
def <=>(*args, &block); end
|
26
|
-
def ==(arg); end
|
27
|
-
def ===(arg); end
|
28
|
-
def =~(*args, &block); end
|
29
|
-
def _singularize(string); end
|
30
|
-
def as_json(*args, &block); end
|
31
|
-
def cache_key; end
|
32
|
-
def collection; end
|
33
|
-
def element; end
|
34
|
-
def eql?(*args, &block); end
|
35
|
-
def human(options = nil); end
|
36
|
-
def i18n_key; end
|
37
|
-
def initialize(klass, namespace = nil, name = nil); end
|
38
|
-
def match?(*args, &block); end
|
39
|
-
def name; end
|
40
|
-
def param_key; end
|
41
|
-
def plural; end
|
42
|
-
def route_key; end
|
43
|
-
def singular; end
|
44
|
-
def singular_route_key; end
|
45
|
-
def to_s(*args, &block); end
|
46
|
-
def to_str(*args, &block); end
|
47
|
-
include Comparable
|
48
|
-
end
|
49
|
-
module ActiveModel::Naming
|
50
|
-
def model_name; end
|
51
|
-
def self.extended(base); end
|
52
|
-
def self.model_name_from_record_or_class(record_or_class); end
|
53
|
-
def self.param_key(record_or_class); end
|
54
|
-
def self.plural(record_or_class); end
|
55
|
-
def self.route_key(record_or_class); end
|
56
|
-
def self.singular(record_or_class); end
|
57
|
-
def self.singular_route_key(record_or_class); end
|
58
|
-
def self.uncountable?(record_or_class); end
|
59
|
-
end
|
60
|
-
module ActiveModel::Translation
|
61
|
-
def human_attribute_name(attribute, options = nil); end
|
62
|
-
def i18n_scope; end
|
63
|
-
def lookup_ancestors; end
|
64
|
-
include ActiveModel::Naming
|
65
|
-
end
|
66
|
-
module ActiveModel::Conversion
|
67
|
-
def to_key; end
|
68
|
-
def to_model; end
|
69
|
-
def to_param; end
|
70
|
-
def to_partial_path; end
|
71
|
-
extend ActiveSupport::Concern
|
72
|
-
end
|
73
|
-
module ActiveModel::Conversion::ClassMethods
|
74
|
-
def _to_partial_path; end
|
75
|
-
end
|