cmdx 1.7.5 → 1.8.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/.cursor/prompts/docs.md +1 -1
- data/.cursor/prompts/rspec.md +1 -1
- data/CHANGELOG.md +20 -0
- data/LLM.md +53 -25
- data/docs/attributes/coercions.md +7 -5
- data/docs/attributes/definitions.md +13 -9
- data/docs/attributes/validations.md +9 -7
- data/docs/interruptions/halt.md +25 -4
- data/lib/cmdx/attribute.rb +7 -1
- data/lib/cmdx/coercions/hash.rb +4 -1
- data/lib/cmdx/errors.rb +1 -1
- data/lib/cmdx/executor.rb +4 -2
- data/lib/cmdx/log_formatters/logstash.rb +4 -4
- data/lib/cmdx/version.rb +1 -1
- data/lib/locales/af.yml +2 -2
- data/lib/locales/ar.yml +2 -2
- data/lib/locales/az.yml +2 -2
- data/lib/locales/be.yml +2 -2
- data/lib/locales/bg.yml +2 -2
- data/lib/locales/bn.yml +2 -2
- data/lib/locales/bs.yml +2 -2
- data/lib/locales/ca.yml +2 -2
- data/lib/locales/cnr.yml +2 -2
- data/lib/locales/cs.yml +2 -2
- data/lib/locales/cy.yml +2 -2
- data/lib/locales/da.yml +2 -2
- data/lib/locales/de.yml +2 -2
- data/lib/locales/dz.yml +2 -2
- data/lib/locales/el.yml +2 -2
- data/lib/locales/en.yml +2 -2
- data/lib/locales/eo.yml +2 -2
- data/lib/locales/es.yml +2 -2
- data/lib/locales/et.yml +2 -2
- data/lib/locales/eu.yml +2 -2
- data/lib/locales/fa.yml +2 -2
- data/lib/locales/fi.yml +2 -2
- data/lib/locales/fr.yml +2 -2
- data/lib/locales/fy.yml +2 -2
- data/lib/locales/gd.yml +2 -2
- data/lib/locales/gl.yml +2 -2
- data/lib/locales/he.yml +2 -2
- data/lib/locales/hi.yml +2 -2
- data/lib/locales/hr.yml +2 -2
- data/lib/locales/hu.yml +2 -2
- data/lib/locales/hy.yml +2 -2
- data/lib/locales/id.yml +2 -2
- data/lib/locales/is.yml +2 -2
- data/lib/locales/it.yml +2 -2
- data/lib/locales/ja.yml +2 -2
- data/lib/locales/ka.yml +2 -2
- data/lib/locales/kk.yml +2 -2
- data/lib/locales/km.yml +2 -2
- data/lib/locales/kn.yml +2 -2
- data/lib/locales/ko.yml +2 -2
- data/lib/locales/lb.yml +2 -2
- data/lib/locales/lo.yml +2 -2
- data/lib/locales/lt.yml +2 -2
- data/lib/locales/lv.yml +2 -2
- data/lib/locales/mg.yml +2 -2
- data/lib/locales/mk.yml +2 -2
- data/lib/locales/ml.yml +2 -2
- data/lib/locales/mn.yml +2 -2
- data/lib/locales/mr-IN.yml +2 -2
- data/lib/locales/ms.yml +2 -2
- data/lib/locales/nb.yml +2 -2
- data/lib/locales/ne.yml +2 -2
- data/lib/locales/nl.yml +2 -2
- data/lib/locales/nn.yml +2 -2
- data/lib/locales/oc.yml +2 -2
- data/lib/locales/or.yml +2 -2
- data/lib/locales/pa.yml +2 -2
- data/lib/locales/pl.yml +2 -2
- data/lib/locales/pt.yml +2 -2
- data/lib/locales/rm.yml +2 -2
- data/lib/locales/ro.yml +2 -2
- data/lib/locales/ru.yml +2 -2
- data/lib/locales/sc.yml +2 -2
- data/lib/locales/sk.yml +2 -2
- data/lib/locales/sl.yml +2 -2
- data/lib/locales/sq.yml +2 -2
- data/lib/locales/sr.yml +2 -2
- data/lib/locales/st.yml +2 -2
- data/lib/locales/sv.yml +2 -2
- data/lib/locales/sw.yml +2 -2
- data/lib/locales/ta.yml +2 -2
- data/lib/locales/te.yml +2 -2
- data/lib/locales/th.yml +2 -2
- data/lib/locales/tl.yml +2 -2
- data/lib/locales/tr.yml +2 -2
- data/lib/locales/tt.yml +2 -2
- data/lib/locales/ug.yml +2 -2
- data/lib/locales/uk.yml +2 -2
- data/lib/locales/ur.yml +2 -2
- data/lib/locales/uz.yml +2 -2
- data/lib/locales/vi.yml +2 -2
- data/lib/locales/wo.yml +2 -2
- data/lib/locales/zh-CN.yml +2 -2
- data/lib/locales/zh-HK.yml +2 -2
- data/lib/locales/zh-TW.yml +2 -2
- data/lib/locales/zh-YUE.yml +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85aac46372133bca5764f5bfe14b1809e5a910aed2c449660d2d1123d79540f1
|
4
|
+
data.tar.gz: 4e377e2bd36936a83f8f244ddea45e2af05277daecbf5e49db76f4cb38fe46fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38fec1c99ea4cb1cdd7639f65d85c76aeeac37fa1be3410344a2dda709e2a1f34cdf26d3b50cc7c7309a7234c756def0db8e2feb083972783018f6f4fc2fade1
|
7
|
+
data.tar.gz: d08526598534fddb102297b1312304696bb4ffd6783d3549f7b4332cd83c8895cda84faeb1d427b14c8f60ae8a30839e983c1a649dcace3da1ec6a6978ab079d
|
data/.cursor/prompts/docs.md
CHANGED
@@ -7,6 +7,6 @@ Update the active tab using the following guidelines:
|
|
7
7
|
- Examples should be concise, non-repetitive, and realistic
|
8
8
|
- Update any pre-existing documentation to match stated rules
|
9
9
|
- Examples should not cross boundaries or focus
|
10
|
-
- Docs must cover both typical use cases, including
|
10
|
+
- Docs must cover both typical use cases, including Invalid and error conditions
|
11
11
|
- Use GitHub flavored markdown, including alerts to emphasize critical information (https://github.com/orgs/community/discussions/16925)
|
12
12
|
- Optimize for LLM's including coding and AI agents
|
data/.cursor/prompts/rspec.md
CHANGED
@@ -18,7 +18,7 @@ Add tests for the active tab using the following guidelines:
|
|
18
18
|
- Use clear and descriptive names for describe, context, and it blocks
|
19
19
|
- Prefer the expect syntax for assertions to improve readability
|
20
20
|
- Keep test code concise; avoid unnecessary complexity or duplication
|
21
|
-
- Tests must cover both typical cases and edge cases, including
|
21
|
+
- Tests must cover both typical cases and edge cases, including Invalid and error conditions
|
22
22
|
- Consider all possible scenarios for each method or behavior and ensure they are tested
|
23
23
|
- Do NOT include integration or real world examples
|
24
24
|
- Verify all specs are passing
|
data/CHANGELOG.md
CHANGED
@@ -4,8 +4,28 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [TODO]
|
8
|
+
- Update exceptions with more info on how to fix the issue
|
9
|
+
- Add trnasform option to attributes
|
10
|
+
- Add option to output failure backtraces
|
11
|
+
- Add durability (retries) to execution
|
12
|
+
- N-retries (3 default)
|
13
|
+
- Backoff strategy
|
14
|
+
- On specific errors
|
15
|
+
|
7
16
|
## [UNRELEASED]
|
8
17
|
|
18
|
+
- N/A
|
19
|
+
|
20
|
+
## [1.8.0] - 2025-09-22
|
21
|
+
|
22
|
+
### Changes
|
23
|
+
- Generalize locale values for fault `invalid` and `unspecified`
|
24
|
+
- Nest attribute error messages under `error` key within metadata
|
25
|
+
- Reordered logstash formatter keys
|
26
|
+
- Improved already defined error message
|
27
|
+
- Hash coercion for `nil` returns `{}`
|
28
|
+
|
9
29
|
## [1.7.5] - 2025-09-10
|
10
30
|
|
11
31
|
### Added
|
data/LLM.md
CHANGED
@@ -783,7 +783,7 @@ result = ProcessInventory.execute(inventory_id: 456)
|
|
783
783
|
result.status #=> "skipped"
|
784
784
|
|
785
785
|
# Without a reason
|
786
|
-
result.reason #=> "
|
786
|
+
result.reason #=> "Unspecified"
|
787
787
|
|
788
788
|
# With a reason
|
789
789
|
result.reason #=> "Warehouse closed"
|
@@ -818,7 +818,7 @@ result = ProcessRefund.execute(refund_id: 789)
|
|
818
818
|
result.status #=> "failed"
|
819
819
|
|
820
820
|
# Without a reason
|
821
|
-
result.reason #=> "
|
821
|
+
result.reason #=> "Unspecified"
|
822
822
|
|
823
823
|
# With a reason
|
824
824
|
result.reason #=> "Refund period has expired"
|
@@ -938,8 +938,28 @@ skip!("Paused")
|
|
938
938
|
fail!("Unsupported")
|
939
939
|
|
940
940
|
# Bad: Default, cannot determine reason
|
941
|
-
skip! #=> "
|
942
|
-
fail! #=> "
|
941
|
+
skip! #=> "Unspecified"
|
942
|
+
fail! #=> "Unspecified"
|
943
|
+
```
|
944
|
+
|
945
|
+
## Manual Errors
|
946
|
+
|
947
|
+
There are rare cases where you need to manually assign errors.
|
948
|
+
|
949
|
+
> [!IMPORTANT]
|
950
|
+
> Keep in mind you will still need to initiate a fault if a stoppage of work is required.
|
951
|
+
|
952
|
+
```ruby
|
953
|
+
class ProcessRenewal < CMDx::Task
|
954
|
+
def work
|
955
|
+
if document.nonrenewable?
|
956
|
+
errors.add(:document, "not renewable")
|
957
|
+
fail!("document could not be renewed")
|
958
|
+
else
|
959
|
+
document.renew!
|
960
|
+
end
|
961
|
+
end
|
962
|
+
end
|
943
963
|
```
|
944
964
|
|
945
965
|
---
|
@@ -1754,12 +1774,14 @@ result = ConfigureServer.execute(server_id: "srv-001")
|
|
1754
1774
|
|
1755
1775
|
result.state #=> "interrupted"
|
1756
1776
|
result.status #=> "failed"
|
1757
|
-
result.reason #=> "Invalid
|
1777
|
+
result.reason #=> "Invalid"
|
1758
1778
|
result.metadata #=> {
|
1759
|
-
#
|
1760
|
-
#
|
1761
|
-
#
|
1762
|
-
#
|
1779
|
+
# errors: {
|
1780
|
+
# full_message: "environment is required. network_config is required.",
|
1781
|
+
# messages: {
|
1782
|
+
# environment: ["is required"],
|
1783
|
+
# network_config: ["is required"]
|
1784
|
+
# }
|
1763
1785
|
# }
|
1764
1786
|
# }
|
1765
1787
|
|
@@ -1772,11 +1794,13 @@ result = ConfigureServer.execute(
|
|
1772
1794
|
|
1773
1795
|
result.state #=> "interrupted"
|
1774
1796
|
result.status #=> "failed"
|
1775
|
-
result.reason #=> "Invalid
|
1797
|
+
result.reason #=> "Invalid"
|
1776
1798
|
result.metadata #=> {
|
1777
|
-
#
|
1778
|
-
#
|
1779
|
-
#
|
1799
|
+
# errors: {
|
1800
|
+
# full_message: "port is required.",
|
1801
|
+
# messages: {
|
1802
|
+
# port: ["is required"]
|
1803
|
+
# }
|
1780
1804
|
# }
|
1781
1805
|
# }
|
1782
1806
|
```
|
@@ -2000,12 +2024,14 @@ result = AnalyzePerformance.execute(
|
|
2000
2024
|
|
2001
2025
|
result.state #=> "interrupted"
|
2002
2026
|
result.status #=> "failed"
|
2003
|
-
result.reason #=> "Invalid
|
2027
|
+
result.reason #=> "Invalid"
|
2004
2028
|
result.metadata #=> {
|
2005
|
-
#
|
2006
|
-
#
|
2007
|
-
#
|
2008
|
-
#
|
2029
|
+
# errors: {
|
2030
|
+
# full_message: "iterations could not coerce into an integer. score could not coerce into one of: float, big_decimal.",
|
2031
|
+
# messages: {
|
2032
|
+
# iterations: ["could not coerce into an integer"],
|
2033
|
+
# score: ["could not coerce into one of: float, big_decimal"]
|
2034
|
+
# }
|
2009
2035
|
# }
|
2010
2036
|
# }
|
2011
2037
|
```
|
@@ -2294,14 +2320,16 @@ result = CreateProject.execute(
|
|
2294
2320
|
|
2295
2321
|
result.state #=> "interrupted"
|
2296
2322
|
result.status #=> "failed"
|
2297
|
-
result.reason #=> "Invalid
|
2323
|
+
result.reason #=> "Invalid"
|
2298
2324
|
result.metadata #=> {
|
2299
|
-
#
|
2300
|
-
#
|
2301
|
-
#
|
2302
|
-
#
|
2303
|
-
#
|
2304
|
-
#
|
2325
|
+
# errors: {
|
2326
|
+
# full_message: "project_name is too short (minimum is 3 characters). budget must be greater than 1000. priority is not included in the list. contact_email is invalid.",
|
2327
|
+
# messages: {
|
2328
|
+
# project_name: ["is too short (minimum is 3 characters)"],
|
2329
|
+
# budget: ["must be greater than 1000"],
|
2330
|
+
# priority: ["is not included in the list"],
|
2331
|
+
# contact_email: ["is invalid"]
|
2332
|
+
# }
|
2305
2333
|
# }
|
2306
2334
|
# }
|
2307
2335
|
```
|
@@ -149,12 +149,14 @@ result = AnalyzePerformance.execute(
|
|
149
149
|
|
150
150
|
result.state #=> "interrupted"
|
151
151
|
result.status #=> "failed"
|
152
|
-
result.reason #=> "Invalid
|
152
|
+
result.reason #=> "Invalid"
|
153
153
|
result.metadata #=> {
|
154
|
-
#
|
155
|
-
#
|
156
|
-
#
|
157
|
-
#
|
154
|
+
# errors: {
|
155
|
+
# full_message: "iterations could not coerce into an integer. score could not coerce into one of: float, big_decimal.",
|
156
|
+
# messages: {
|
157
|
+
# iterations: ["could not coerce into an integer"],
|
158
|
+
# score: ["could not coerce into one of: float, big_decimal"]
|
159
|
+
# }
|
158
160
|
# }
|
159
161
|
# }
|
160
162
|
```
|
@@ -250,12 +250,14 @@ result = ConfigureServer.execute(server_id: "srv-001")
|
|
250
250
|
|
251
251
|
result.state #=> "interrupted"
|
252
252
|
result.status #=> "failed"
|
253
|
-
result.reason #=> "Invalid
|
253
|
+
result.reason #=> "Invalid"
|
254
254
|
result.metadata #=> {
|
255
|
-
#
|
256
|
-
#
|
257
|
-
#
|
258
|
-
#
|
255
|
+
# errors: {
|
256
|
+
# full_message: "environment is required. network_config is required.",
|
257
|
+
# messages: {
|
258
|
+
# environment: ["is required"],
|
259
|
+
# network_config: ["is required"]
|
260
|
+
# }
|
259
261
|
# }
|
260
262
|
# }
|
261
263
|
|
@@ -268,11 +270,13 @@ result = ConfigureServer.execute(
|
|
268
270
|
|
269
271
|
result.state #=> "interrupted"
|
270
272
|
result.status #=> "failed"
|
271
|
-
result.reason #=> "Invalid
|
273
|
+
result.reason #=> "Invalid"
|
272
274
|
result.metadata #=> {
|
273
|
-
#
|
274
|
-
#
|
275
|
-
#
|
275
|
+
# errors: {
|
276
|
+
# full_message: "port is required.",
|
277
|
+
# messages: {
|
278
|
+
# port: ["is required"]
|
279
|
+
# }
|
276
280
|
# }
|
277
281
|
# }
|
278
282
|
```
|
@@ -294,14 +294,16 @@ result = CreateProject.execute(
|
|
294
294
|
|
295
295
|
result.state #=> "interrupted"
|
296
296
|
result.status #=> "failed"
|
297
|
-
result.reason #=> "Invalid
|
297
|
+
result.reason #=> "Invalid"
|
298
298
|
result.metadata #=> {
|
299
|
-
#
|
300
|
-
#
|
301
|
-
#
|
302
|
-
#
|
303
|
-
#
|
304
|
-
#
|
299
|
+
# errors: {
|
300
|
+
# full_message: "project_name is too short (minimum is 3 characters). budget must be greater than 1000. priority is not included in the list. contact_email is invalid.",
|
301
|
+
# messages: {
|
302
|
+
# project_name: ["is too short (minimum is 3 characters)"],
|
303
|
+
# budget: ["must be greater than 1000"],
|
304
|
+
# priority: ["is not included in the list"],
|
305
|
+
# contact_email: ["is invalid"]
|
306
|
+
# }
|
305
307
|
# }
|
306
308
|
# }
|
307
309
|
```
|
data/docs/interruptions/halt.md
CHANGED
@@ -12,6 +12,7 @@ Halting stops task execution with explicit intent signaling. Tasks provide two p
|
|
12
12
|
- [Non-bang execution](#non-bang-execution)
|
13
13
|
- [Bang execution](#bang-execution)
|
14
14
|
- [Best Practices](#best-practices)
|
15
|
+
- [Manual Errors](#manual-errors)
|
15
16
|
|
16
17
|
## Skipping
|
17
18
|
|
@@ -45,7 +46,7 @@ result = ProcessInventory.execute(inventory_id: 456)
|
|
45
46
|
result.status #=> "skipped"
|
46
47
|
|
47
48
|
# Without a reason
|
48
|
-
result.reason #=> "
|
49
|
+
result.reason #=> "Unspecified"
|
49
50
|
|
50
51
|
# With a reason
|
51
52
|
result.reason #=> "Warehouse closed"
|
@@ -80,7 +81,7 @@ result = ProcessRefund.execute(refund_id: 789)
|
|
80
81
|
result.status #=> "failed"
|
81
82
|
|
82
83
|
# Without a reason
|
83
|
-
result.reason #=> "
|
84
|
+
result.reason #=> "Unspecified"
|
84
85
|
|
85
86
|
# With a reason
|
86
87
|
result.reason #=> "Refund period has expired"
|
@@ -200,8 +201,28 @@ skip!("Paused")
|
|
200
201
|
fail!("Unsupported")
|
201
202
|
|
202
203
|
# Bad: Default, cannot determine reason
|
203
|
-
skip! #=> "
|
204
|
-
fail! #=> "
|
204
|
+
skip! #=> "Unspecified"
|
205
|
+
fail! #=> "Unspecified"
|
206
|
+
```
|
207
|
+
|
208
|
+
## Manual Errors
|
209
|
+
|
210
|
+
There are rare cases where you need to manually assign errors.
|
211
|
+
|
212
|
+
> [!IMPORTANT]
|
213
|
+
> Keep in mind you will still need to initiate a fault if a stoppage of work is required.
|
214
|
+
|
215
|
+
```ruby
|
216
|
+
class ProcessRenewal < CMDx::Task
|
217
|
+
def work
|
218
|
+
if document.nonrenewable?
|
219
|
+
errors.add(:document, "not renewable")
|
220
|
+
fail!("document could not be renewed")
|
221
|
+
else
|
222
|
+
document.renew!
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
205
226
|
```
|
206
227
|
|
207
228
|
---
|
data/lib/cmdx/attribute.rb
CHANGED
@@ -212,7 +212,13 @@ module CMDx
|
|
212
212
|
#
|
213
213
|
# @raise [RuntimeError] When the method name is already defined on the task
|
214
214
|
def define_and_verify
|
215
|
-
|
215
|
+
if task.respond_to?(method_name, true)
|
216
|
+
raise <<~MESSAGE.gsub!(/[[:space:]]+/, " ").strip!
|
217
|
+
#{task.class.name}##{method_name} already defined.
|
218
|
+
Use :as, :prefix, or :suffix option to avoid
|
219
|
+
conflicts with existing methods
|
220
|
+
MESSAGE
|
221
|
+
end
|
216
222
|
|
217
223
|
attribute_value = AttributeValue.new(self)
|
218
224
|
attribute_value.generate
|
data/lib/cmdx/coercions/hash.rb
CHANGED
@@ -5,6 +5,7 @@ module CMDx
|
|
5
5
|
# Coerces various input types into Hash objects
|
6
6
|
#
|
7
7
|
# Supports conversion from:
|
8
|
+
# - Nil values (converted to empty Hash)
|
8
9
|
# - Hash objects (returned as-is)
|
9
10
|
# - Array objects (converted using Hash[*array])
|
10
11
|
# - JSON strings starting with "{" (parsed into Hash)
|
@@ -30,7 +31,9 @@ module CMDx
|
|
30
31
|
# @example Coerce from JSON string
|
31
32
|
# Hash.call('{"key": "value"}') # => {"key" => "value"}
|
32
33
|
def call(value, options = {})
|
33
|
-
if value.
|
34
|
+
if value.nil?
|
35
|
+
{}
|
36
|
+
elsif value.is_a?(::Hash)
|
34
37
|
value
|
35
38
|
elsif value.is_a?(::Array)
|
36
39
|
::Hash[*value]
|
data/lib/cmdx/errors.rb
CHANGED
@@ -48,7 +48,7 @@ module CMDx
|
|
48
48
|
!messages[attribute].empty?
|
49
49
|
end
|
50
50
|
|
51
|
-
# Convert errors to a hash format with arrays of
|
51
|
+
# Convert errors to a hash format with arrays of full messages.
|
52
52
|
#
|
53
53
|
# @return [Hash{Symbol => Array<String>}] Hash with attribute keys and message arrays
|
54
54
|
#
|
data/lib/cmdx/executor.rb
CHANGED
@@ -144,8 +144,10 @@ module CMDx
|
|
144
144
|
|
145
145
|
task.result.fail!(
|
146
146
|
Locale.t("cmdx.faults.invalid"),
|
147
|
-
|
148
|
-
|
147
|
+
errors: {
|
148
|
+
full_message: task.errors.to_s,
|
149
|
+
messages: task.errors.to_h
|
150
|
+
}
|
149
151
|
)
|
150
152
|
end
|
151
153
|
|
@@ -21,15 +21,15 @@ module CMDx
|
|
21
21
|
#
|
22
22
|
# @example Basic usage
|
23
23
|
# logger_formatter.call("INFO", Time.now, "MyApp", "User logged in")
|
24
|
-
# # => '{"
|
24
|
+
# # => '{"severity":"INFO","progname":"MyApp","pid":12345,"message":"User logged in","@version":"1","@timestamp":"2024-01-15T10:30:45.123456Z"}\n'
|
25
25
|
def call(severity, time, progname, message)
|
26
26
|
hash = {
|
27
|
-
"@version" => "1",
|
28
|
-
"@timestamp" => time.utc.iso8601(6),
|
29
27
|
severity:,
|
30
28
|
progname:,
|
31
29
|
pid: Process.pid,
|
32
|
-
message: Utils::Format.to_log(message)
|
30
|
+
message: Utils::Format.to_log(message),
|
31
|
+
"@version" => "1",
|
32
|
+
"@timestamp" => time.utc.iso8601(6)
|
33
33
|
}
|
34
34
|
|
35
35
|
::JSON.dump(hash) << "\n"
|
data/lib/cmdx/version.rb
CHANGED
data/lib/locales/af.yml
CHANGED
@@ -9,8 +9,8 @@ af:
|
|
9
9
|
into_any: "kon nie na een van: %{types} omskep word nie"
|
10
10
|
unknown: "onbekende %{type} omskep tipe"
|
11
11
|
faults:
|
12
|
-
invalid: "
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Ongeldig"
|
13
|
+
unspecified: "Ongespesifiseer"
|
14
14
|
types:
|
15
15
|
array: "skikking"
|
16
16
|
big_decimal: "groot desimale"
|
data/lib/locales/ar.yml
CHANGED
@@ -9,8 +9,8 @@ ar:
|
|
9
9
|
into_any: "لا يمكن تحويله إلى واحد من: %{types}"
|
10
10
|
unknown: "نوع تحويل %{type} غير معروف"
|
11
11
|
faults:
|
12
|
-
invalid: "
|
13
|
-
unspecified: "
|
12
|
+
invalid: "غير صالح"
|
13
|
+
unspecified: "غير محدد"
|
14
14
|
types:
|
15
15
|
array: "مصفوفة"
|
16
16
|
big_decimal: "عدد عشري كبير"
|
data/lib/locales/az.yml
CHANGED
@@ -9,8 +9,8 @@ az:
|
|
9
9
|
into_any: "aşağıdakılardan birinə çevrilə bilmədi: %{types}"
|
10
10
|
unknown: "naməlum %{type} çevrilmə tipi"
|
11
11
|
faults:
|
12
|
-
invalid: "Etibarsız
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Etibarsız"
|
13
|
+
unspecified: "Göstərilməyib"
|
14
14
|
types:
|
15
15
|
array: "massiv"
|
16
16
|
big_decimal: "böyük onluq"
|
data/lib/locales/be.yml
CHANGED
@@ -9,8 +9,8 @@ be:
|
|
9
9
|
into_any: "не ўдалося пераўтварыць у адзін з: %{types}"
|
10
10
|
unknown: "невядомы тып пераўтварэння %{type}"
|
11
11
|
faults:
|
12
|
-
invalid: "Няправільныя
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Няправільныя"
|
13
|
+
unspecified: "Не паказана"
|
14
14
|
types:
|
15
15
|
array: "масіў"
|
16
16
|
big_decimal: "вялікае дзесятковае лік"
|
data/lib/locales/bg.yml
CHANGED
@@ -9,8 +9,8 @@ bg:
|
|
9
9
|
into_any: "не може да бъде преобразуван в един от: %{types}"
|
10
10
|
unknown: "неизвестен тип преобразуване %{type}"
|
11
11
|
faults:
|
12
|
-
invalid: "Невалидни
|
13
|
-
unspecified: "Не е посочена
|
12
|
+
invalid: "Невалидни"
|
13
|
+
unspecified: "Не е посочена"
|
14
14
|
types:
|
15
15
|
array: "масив"
|
16
16
|
big_decimal: "голямо десетично число"
|
data/lib/locales/bn.yml
CHANGED
@@ -9,8 +9,8 @@ bn:
|
|
9
9
|
into_any: "নিম্নলিখিতগুলির মধ্যে একটিতে রূপান্তর করা যায়নি: %{types}"
|
10
10
|
unknown: "অজানা %{type} রূপান্তর প্রকার"
|
11
11
|
faults:
|
12
|
-
invalid: "অবৈধ
|
13
|
-
unspecified: "
|
12
|
+
invalid: "অবৈধ"
|
13
|
+
unspecified: "অনির্দিষ্ট"
|
14
14
|
types:
|
15
15
|
array: "অ্যারে"
|
16
16
|
big_decimal: "বড় দশমিক"
|
data/lib/locales/bs.yml
CHANGED
@@ -9,8 +9,8 @@ bs:
|
|
9
9
|
into_any: "nije mogao biti pretvoren u jedan od: %{types}"
|
10
10
|
unknown: "nepoznati tip pretvorbe %{type}"
|
11
11
|
faults:
|
12
|
-
invalid: "Neispravni
|
13
|
-
unspecified: "Nije naveden
|
12
|
+
invalid: "Neispravni"
|
13
|
+
unspecified: "Nije naveden"
|
14
14
|
types:
|
15
15
|
array: "niz"
|
16
16
|
big_decimal: "veliki decimalni broj"
|
data/lib/locales/ca.yml
CHANGED
@@ -9,8 +9,8 @@ ca:
|
|
9
9
|
into_any: "no es va poder convertir a un de: %{types}"
|
10
10
|
unknown: "tipus de conversió %{type} desconegut"
|
11
11
|
faults:
|
12
|
-
invalid: "
|
13
|
-
unspecified: "No
|
12
|
+
invalid: "No vàlides"
|
13
|
+
unspecified: "No especificat"
|
14
14
|
types:
|
15
15
|
array: "array"
|
16
16
|
big_decimal: "decimal gran"
|
data/lib/locales/cnr.yml
CHANGED
@@ -9,8 +9,8 @@ cnr:
|
|
9
9
|
into_any: "nije mogao konvertovati u jedan od: %{types}"
|
10
10
|
unknown: "nepoznati %{type} tip konverzije"
|
11
11
|
faults:
|
12
|
-
invalid: "Neispravni
|
13
|
-
unspecified: "Nije dat
|
12
|
+
invalid: "Neispravni"
|
13
|
+
unspecified: "Nije dat"
|
14
14
|
types:
|
15
15
|
array: "niz"
|
16
16
|
big_decimal: "veliki decimalni"
|
data/lib/locales/cs.yml
CHANGED
@@ -9,8 +9,8 @@ cs:
|
|
9
9
|
into_any: "nelze převést na jeden z: %{types}"
|
10
10
|
unknown: "neznámý typ převodu %{type}"
|
11
11
|
faults:
|
12
|
-
invalid: "Neplatné
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Neplatné"
|
13
|
+
unspecified: "Neurčeno"
|
14
14
|
types:
|
15
15
|
array: "pole"
|
16
16
|
big_decimal: "velké desetinné číslo"
|
data/lib/locales/cy.yml
CHANGED
@@ -9,8 +9,8 @@ cy:
|
|
9
9
|
into_any: "ni allwyd ei drawsnewid i un o: %{types}"
|
10
10
|
unknown: "math anhysbys o drawsnewid %{type}"
|
11
11
|
faults:
|
12
|
-
invalid: "
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Annilys"
|
13
|
+
unspecified: "Anhebgor"
|
14
14
|
types:
|
15
15
|
array: "arae"
|
16
16
|
big_decimal: "degol mawr"
|
data/lib/locales/da.yml
CHANGED
@@ -9,8 +9,8 @@ da:
|
|
9
9
|
into_any: "kunne ikke konverteres til en af: %{types}"
|
10
10
|
unknown: "ukendt %{type} konverteringstype"
|
11
11
|
faults:
|
12
|
-
invalid: "Ugyldige
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Ugyldige"
|
13
|
+
unspecified: "Uspecificeret"
|
14
14
|
types:
|
15
15
|
array: "array"
|
16
16
|
big_decimal: "stort decimaltal"
|
data/lib/locales/de.yml
CHANGED
@@ -9,8 +9,8 @@ de:
|
|
9
9
|
into_any: "konnte nicht in einen von: %{types} umgewandelt werden"
|
10
10
|
unknown: "unbekannter %{type} Umwandlungstyp"
|
11
11
|
faults:
|
12
|
-
invalid: "
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Ungültig"
|
13
|
+
unspecified: "Nicht angegeben"
|
14
14
|
types:
|
15
15
|
array: "Array"
|
16
16
|
big_decimal: "große Dezimalzahl"
|
data/lib/locales/dz.yml
CHANGED
@@ -9,8 +9,8 @@ dz:
|
|
9
9
|
into_any: "འདི་ཚོའི་ནང་ནས་གཅིག་ལ་བསྒྱུར་མ་ཐུབ། %{types}"
|
10
10
|
unknown: "མ་ཤེས་པའི་ %{type} བསྒྱུར་པའི་རིགས།"
|
11
11
|
faults:
|
12
|
-
invalid: "
|
13
|
-
unspecified: "
|
12
|
+
invalid: "ཆ་རྐྱེན་མི་ཆོག"
|
13
|
+
unspecified: "མ་བཟུང་།"
|
14
14
|
types:
|
15
15
|
array: "ཐིག་ཕྲེང་།"
|
16
16
|
big_decimal: "ཆེ་བའི་བཅུ་ཆ།"
|
data/lib/locales/el.yml
CHANGED
@@ -9,8 +9,8 @@ el:
|
|
9
9
|
into_any: "δεν μπόρεσε να μετατραπεί σε ένα από: %{types}"
|
10
10
|
unknown: "άγνωστος τύπος μετατροπής %{type}"
|
11
11
|
faults:
|
12
|
-
invalid: "Μη έγκυρες
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Μη έγκυρες"
|
13
|
+
unspecified: "Απροσδιόριστο"
|
14
14
|
types:
|
15
15
|
array: "πίνακας"
|
16
16
|
big_decimal: "μεγάλος δεκαδικός"
|
data/lib/locales/en.yml
CHANGED
@@ -9,8 +9,8 @@ en:
|
|
9
9
|
into_any: "could not coerce into one of: %{types}"
|
10
10
|
unknown: "unknown %{type} coercion type"
|
11
11
|
faults:
|
12
|
-
invalid: "Invalid
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Invalid"
|
13
|
+
unspecified: "Unspecified"
|
14
14
|
types:
|
15
15
|
array: "array"
|
16
16
|
big_decimal: "big decimal"
|
data/lib/locales/eo.yml
CHANGED
@@ -9,8 +9,8 @@ eo:
|
|
9
9
|
into_any: "ne povis esti konvertita al unu el: %{types}"
|
10
10
|
unknown: "nekonata %{type} konverta tipo"
|
11
11
|
faults:
|
12
|
-
invalid: "Nevalidaj
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Nevalidaj"
|
13
|
+
unspecified: "Nespecifita"
|
14
14
|
types:
|
15
15
|
array: "tabelo"
|
16
16
|
big_decimal: "granda dekuma"
|
data/lib/locales/es.yml
CHANGED
@@ -9,8 +9,8 @@ es:
|
|
9
9
|
into_any: "no se pudo convertir en uno de: %{types}"
|
10
10
|
unknown: "tipo de conversión %{type} desconocido"
|
11
11
|
faults:
|
12
|
-
invalid: "
|
13
|
-
unspecified: "
|
12
|
+
invalid: "Inválidas"
|
13
|
+
unspecified: "No especificada"
|
14
14
|
types:
|
15
15
|
array: "array"
|
16
16
|
big_decimal: "decimal grande"
|