class_kit 0.7.1 → 0.9.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: 5862b302a6e1c4dddaa15da72f07cc526de5ae2dd0c61c7aed4abec281656cc8
4
- data.tar.gz: 3fee66206edb8a6bdf64911420d00e5057f16e30206b032b2a674a585a9d7408
3
+ metadata.gz: 7eabd3f3f7ac3ef4e982c58ba8b8be6d1381e5b17c0721c52692d53eb336da14
4
+ data.tar.gz: 4ef5d9de4c5664ff7c9cd6865d65692f88691570d57ce75fab9ae4a5635f958c
5
5
  SHA512:
6
- metadata.gz: e0aa0a7303439cf8c049dbaa4d0876cdcdfdec51d10adf68455ff9bebf951c0c73544eea8f56e7bdcb59835f04c78de6d975ceff6aad0e687abdb921139b857b
7
- data.tar.gz: 4d793c93ff3170a45aab2cce0a91ee6dbd4209bc3490af5be019e0601d9370f6cb7ca5d240209b9dc52252d8b865f80c8cc169a30c1dcc1274230314fb94c78f
6
+ metadata.gz: e15932814638fad318677a2a730900e84e67181b241f6b7984dc244c1a96ca8476ee6b0562d45609de939dbf9db0a5861b633c0ac6ccf6fd233ce9b07c5a2681
7
+ data.tar.gz: 149ef28121384fbd91b10755cdad6e8c51d640c71882e156492921c39b2e0e45ddfed336c02de6438d6a2412d002bfd0fac8b2a56082841ffee641efe95d3845
@@ -3,6 +3,7 @@ module ClassKit
3
3
  name,
4
4
  type: nil,
5
5
  collection_type: nil,
6
+ one_of: nil,
6
7
  allow_nil: true,
7
8
  default: nil,
8
9
  auto_init: false,
@@ -17,6 +18,7 @@ module ClassKit
17
18
  attributes[name] = {
18
19
  name: name,
19
20
  type: type,
21
+ one_of: one_of,
20
22
  collection_type: collection_type,
21
23
  allow_nil: allow_nil,
22
24
  default: default,
@@ -54,7 +56,28 @@ module ClassKit
54
56
  raise ClassKit::Exceptions::InvalidAttributeValueError, "Attribute: #{name}, must not be nil."
55
57
  end
56
58
 
57
- # check if the value being set is not of the specified type and should attempt to parse the value
59
+ if !cka[:one_of].nil? && !value.nil?
60
+ parsed_value =
61
+ if value == true || value == false
62
+ value
63
+ elsif(/(true|t|yes|y|1)$/i === value.to_s.downcase)
64
+ true
65
+ elsif (/(false|f|no|n|0)$/i === value.to_s.downcase)
66
+ false
67
+ end
68
+
69
+ if parsed_value != nil
70
+ value = parsed_value
71
+ else
72
+ begin
73
+ type = cka[:one_of].detect {|t| value.is_a?(t) }
74
+ value = ClassKit::ValueHelper.instance.parse(type: type, value: value)
75
+ rescue => e
76
+ raise ClassKit::Exceptions::InvalidAttributeValueError, "Attribute: #{name}, must be of type: #{type}. Error: #{e}"
77
+ end
78
+ end
79
+ end
80
+
58
81
  if !cka[:type].nil? && !value.nil? && (cka[:type] == :bool || !value.is_a?(cka[:type]))
59
82
  begin
60
83
  value = ClassKit::ValueHelper.instance.parse(type: cka[:type], value: value)
@@ -0,0 +1,22 @@
1
+ module ClassKit
2
+ module CustomType
3
+ def self.included(base)
4
+ base.extend(CustomType)
5
+ end
6
+
7
+ # This method must return the parsed value when +from_hash+ is called
8
+ def self.parse_from_hash(_value)
9
+ raise NotImplementedError
10
+ end
11
+
12
+ # This method must return the parsed value when the class' attribute is assigned a value
13
+ def self.parse_assign(_value)
14
+ raise NotImplementedError
15
+ end
16
+
17
+ # This method must return the value that will be serialised for the attribute
18
+ def to_hash_value
19
+ raise NotImplementedError
20
+ end
21
+ end
22
+ end
@@ -11,6 +11,10 @@ module ClassKit
11
11
  klass.is_a?(ClassKit)
12
12
  end
13
13
 
14
+ def is_class_kit_custom_type?(klass)
15
+ !klass.nil? && klass != :bool && klass.include?(ClassKit::CustomType)
16
+ end
17
+
14
18
  def validate_class_kit(klass)
15
19
  is_class_kit?(klass) || raise(ClassKit::Exceptions::InvalidClassError,
16
20
  "Class: #{klass} does not implement ClassKit.")
@@ -32,10 +36,14 @@ module ClassKit
32
36
  if value != nil
33
37
  hash[key] = if is_class_kit?(type)
34
38
  to_hash(value, use_alias)
39
+ elsif is_class_kit_custom_type?(type)
40
+ value.to_hash_value
35
41
  elsif type == Array
36
42
  value.map do |i|
37
43
  if is_class_kit?(i.class)
38
44
  to_hash(i, use_alias)
45
+ elsif is_class_kit_custom_type?(i.class)
46
+ i.to_hash_value
39
47
  else
40
48
  i
41
49
  end
@@ -67,6 +75,8 @@ module ClassKit
67
75
 
68
76
  value = if is_class_kit?(type)
69
77
  from_hash(hash: hash[key], klass: type, use_alias: use_alias)
78
+ elsif is_class_kit_custom_type?(type)
79
+ type.parse_from_hash(hash[key])
70
80
  elsif type == Array
71
81
  hash[key].map do |array_element|
72
82
  if attribute[:collection_type].nil?
@@ -74,6 +84,8 @@ module ClassKit
74
84
  else
75
85
  if is_class_kit?(attribute[:collection_type])
76
86
  from_hash(hash: array_element, klass: attribute[:collection_type], use_alias: use_alias)
87
+ elsif is_class_kit_custom_type?(attribute[:collection_type])
88
+ attribute[:collection_type].parse_from_hash(array_element)
77
89
  else
78
90
  @value_helper.parse(type: attribute[:collection_type], value: array_element)
79
91
  end
@@ -17,16 +17,12 @@ module ClassKit
17
17
  elsif type == Date
18
18
  if value.is_a?(Date)
19
19
  value
20
- elsif value.is_a?(Integer)
21
- Date.at(value)
22
20
  else
23
21
  Date.parse(value)
24
22
  end
25
23
  elsif type == DateTime
26
24
  if value.is_a?(DateTime)
27
25
  value
28
- elsif value.is_a?(Integer)
29
- DateTime.at(value)
30
26
  else
31
27
  DateTime.parse(value)
32
28
  end
@@ -62,6 +58,8 @@ module ClassKit
62
58
  elsif type == Array
63
59
  raise 'Unable to parse Array' unless value.is_a?(Array)
64
60
  value
61
+ elsif type.include?(ClassKit::CustomType)
62
+ type.parse_assign(value)
65
63
  else
66
64
  raise 'Unable to parse'
67
65
  end
@@ -1,5 +1,5 @@
1
1
  # Namespace
2
2
  module ClassKit
3
3
  # :nodoc:
4
- VERSION = '0.7.1'
4
+ VERSION = '0.9.0'
5
5
  end
data/lib/class_kit.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require_relative 'class_kit/class_methods'
2
2
  require_relative 'class_kit/exceptions'
3
3
  require_relative 'class_kit/attribute_helper'
4
+ require_relative 'class_kit/custom_type'
4
5
  require_relative 'class_kit/value_helper'
5
6
  require_relative 'class_kit/helper'
6
7
  require_relative 'class_kit/version'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: class_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sage One
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-17 00:00:00.000000000 Z
11
+ date: 2025-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
27
- - !ruby/object:Gem::Dependency
28
- name: pry
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '2'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -68,6 +54,20 @@ dependencies:
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.22.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.22.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov_json_formatter
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -118,6 +118,7 @@ files:
118
118
  - lib/class_kit.rb
119
119
  - lib/class_kit/attribute_helper.rb
120
120
  - lib/class_kit/class_methods.rb
121
+ - lib/class_kit/custom_type.rb
121
122
  - lib/class_kit/exceptions.rb
122
123
  - lib/class_kit/exceptions/attribute_not_found_error.rb
123
124
  - lib/class_kit/exceptions/invalid_attribute_value_error.rb
@@ -130,7 +131,7 @@ homepage: https://github.com/sage/class_kit
130
131
  licenses:
131
132
  - MIT
132
133
  metadata: {}
133
- post_install_message:
134
+ post_install_message:
134
135
  rdoc_options: []
135
136
  require_paths:
136
137
  - lib
@@ -145,9 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
146
  - !ruby/object:Gem::Version
146
147
  version: '0'
147
148
  requirements: []
148
- rubyforge_project:
149
- rubygems_version: 2.7.7
150
- signing_key:
149
+ rubygems_version: 3.4.20
150
+ signing_key:
151
151
  specification_version: 4
152
152
  summary: Toolkit for working with classes
153
153
  test_files: []