class_kit 0.7.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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: []