class_kit 0.5.1 → 0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dafa96fa9b5a4e0d5b0c498dad30b76fc4f1e7385bffae89a2924bc36e3932c1
4
- data.tar.gz: 94779e51e0a4f0730aa937bfb653497a565bd5833ef7479911a1ece12c713223
3
+ metadata.gz: 4f501847a8ffea1775ff197945234f28865db2ba0188b35d469b9e2968f00d2f
4
+ data.tar.gz: 37c4acff0fc0114dc9cc4e4fe9c2c41acc294fa4d54e3e53e99149ac0afb17ad
5
5
  SHA512:
6
- metadata.gz: e6cac82b1b5f66f248a43ebb90813c274e2322dbe9813ad30ecda694ade0085fcedcc3aa1eb88ea69656a8c2863bd2ae2fb6fa7c0697321d458a6b8df203dfa4
7
- data.tar.gz: fff56f5479de5a961f8c1e4768667c35ca13c9ba41e7d08fbe54dd7556c3ba01d03a21c3c5dfeef6d75496c3a1971160c0b873ed3dbec91210dd640727063fc9
6
+ metadata.gz: 77507663db94f9e8d8da1a77bde21ef2000f40124a3a776de446715a133b944aa132fe71cf68dd7197b1434a6a70b0817dfcb455b4a2808d57f3878ad4472d59
7
+ data.tar.gz: b2f047deffc4c43fb07b09b6ba8d9a7d9d732c1f0b5ed5192af614182e1bf6703fb72bcd3b0fb4a4dee010db515bc7f700f0b4c09cdf3b03b7cd43e297b000fe
@@ -5,12 +5,18 @@ module ClassKit
5
5
  @instance ||= ClassKit::AttributeHelper.new
6
6
  end
7
7
 
8
+ def initialize
9
+ @attribute_store = {}
10
+ end
11
+
8
12
  # Get attributes for a given class
9
13
  #
10
14
  # @param klass [ClassKit] a class that has been extended with ClassKit
11
15
  #
12
16
  # @return [Hash]
13
17
  def get_attributes(klass)
18
+ return @attribute_store[klass] if @attribute_store.key?(klass)
19
+
14
20
  attributes = []
15
21
  klass.ancestors.map do |k|
16
22
  hash = k.instance_variable_get(:@class_kit_attributes)
@@ -20,7 +26,10 @@ module ClassKit
20
26
  end
21
27
  end
22
28
  end
23
- attributes.compact
29
+ attributes.compact!
30
+
31
+ @attribute_store[klass] = attributes
32
+ attributes
24
33
  end
25
34
 
26
35
  # Get attribute for a given class and name
@@ -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.")
@@ -18,6 +22,8 @@ module ClassKit
18
22
 
19
23
  # This method is called to convert a ClassKit object into a Hash.
20
24
  def to_hash(object, use_alias = false)
25
+ return object.map { |i| to_hash(i, use_alias) } if object.is_a?(Array)
26
+
21
27
  validate_class_kit(object.class)
22
28
 
23
29
  hash = {}
@@ -30,10 +36,14 @@ module ClassKit
30
36
  if value != nil
31
37
  hash[key] = if is_class_kit?(type)
32
38
  to_hash(value, use_alias)
39
+ elsif is_class_kit_custom_type?(type)
40
+ value.to_hash_value
33
41
  elsif type == Array
34
42
  value.map do |i|
35
43
  if is_class_kit?(i.class)
36
44
  to_hash(i, use_alias)
45
+ elsif is_class_kit_custom_type?(i.class)
46
+ i.to_hash_value
37
47
  else
38
48
  i
39
49
  end
@@ -51,6 +61,8 @@ module ClassKit
51
61
  def from_hash(hash:, klass:, use_alias: false)
52
62
  validate_class_kit(klass)
53
63
 
64
+ return hash.map { |i| from_hash(hash: i, klass: klass, use_alias: use_alias) } if hash.is_a?(Array)
65
+
54
66
  @hash_helper.indifferent!(hash)
55
67
  entity = klass.new
56
68
  attributes = @attribute_helper.get_attributes(klass)
@@ -63,6 +75,8 @@ module ClassKit
63
75
 
64
76
  value = if is_class_kit?(type)
65
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])
66
80
  elsif type == Array
67
81
  hash[key].map do |array_element|
68
82
  if attribute[:collection_type].nil?
@@ -70,6 +84,8 @@ module ClassKit
70
84
  else
71
85
  if is_class_kit?(attribute[:collection_type])
72
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)
73
89
  else
74
90
  @value_helper.parse(type: attribute[:collection_type], value: array_element)
75
91
  end
@@ -9,7 +9,7 @@ module ClassKit
9
9
  if type == Time
10
10
  if value.is_a?(Time)
11
11
  value
12
- elsif value.is_a?(Integer) || value.is_a?(Float)
12
+ elsif value.is_a?(Integer) || value.is_a?(Float) || value.is_a?(BigDecimal)
13
13
  Time.at(value)
14
14
  else
15
15
  Time.parse(value)
@@ -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
@@ -0,0 +1,5 @@
1
+ # Namespace
2
+ module ClassKit
3
+ # :nodoc:
4
+ VERSION = '0.8.0'
5
+ end
data/lib/class_kit.rb CHANGED
@@ -1,8 +1,10 @@
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'
7
+ require_relative 'class_kit/version'
6
8
  require 'hash_kit'
7
9
  require 'json'
8
10
  require 'date'
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.5.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sage One
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-19 00:00:00.000000000 Z
11
+ date: 2021-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,44 +16,44 @@ 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'
26
+ version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: pry
56
+ name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: json
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "<"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.18.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.18.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: hash_kit
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: hash_kit
98
+ name: json
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -104,6 +118,7 @@ files:
104
118
  - lib/class_kit.rb
105
119
  - lib/class_kit/attribute_helper.rb
106
120
  - lib/class_kit/class_methods.rb
121
+ - lib/class_kit/custom_type.rb
107
122
  - lib/class_kit/exceptions.rb
108
123
  - lib/class_kit/exceptions/attribute_not_found_error.rb
109
124
  - lib/class_kit/exceptions/invalid_attribute_value_error.rb
@@ -111,6 +126,7 @@ files:
111
126
  - lib/class_kit/exceptions/invalid_parse_value_error.rb
112
127
  - lib/class_kit/helper.rb
113
128
  - lib/class_kit/value_helper.rb
129
+ - lib/class_kit/version.rb
114
130
  homepage: https://github.com/sage/class_kit
115
131
  licenses:
116
132
  - MIT
@@ -130,8 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
146
  - !ruby/object:Gem::Version
131
147
  version: '0'
132
148
  requirements: []
133
- rubyforge_project:
134
- rubygems_version: 2.7.6
149
+ rubygems_version: 3.1.2
135
150
  signing_key:
136
151
  specification_version: 4
137
152
  summary: Toolkit for working with classes