attr_typed 1.0.0 → 1.0.5

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
- SHA1:
3
- metadata.gz: 63551aa968c5f70cc12e5f78968504af5fdd684d
4
- data.tar.gz: a85087575bed96f0853bd590a3ef101e49dd3a9d
2
+ SHA256:
3
+ metadata.gz: 0c7f130030e5e764a67034274f152a01f614bff460d5838e3c5931b28b164abb
4
+ data.tar.gz: d94dd0eb7dcb00158254c05c2360ccf292d9de6fdae4a5859e63ac207c94b478
5
5
  SHA512:
6
- metadata.gz: 6561f15f3e79fdd38f8dcadbdaf26e09fd81881f278e07578ccaeae41c2d0216fa73045879ae5e24a9ee57b23aa6d6de107026ad7f561d2d884213af3c6d1c7f
7
- data.tar.gz: 85c3925fed636794081343ce086294179a72e10702129f1c3e82c09fe4a651c1888d2658d14bd68d65d622a125d557c5a794cc4865a65245bfbcaa4da2e8a77a
6
+ metadata.gz: 2f3491dc81c066a365aebf0af6b444a0bf6698507179fe6912d4b23f87d8e0bfa1b984e1feea3c42978727920622ce65ef5ef83d7d46033e13b40117b59fca17
7
+ data.tar.gz: a4cfefa65918e3c628250c7574c88165f2af8f02994fab35c3c311720b4a8cc582b48ec036e6fb6d28f9e192117a7ba8a22ec21504a5ad380716447ecda91b46
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ pkg/
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,24 +1,27 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'attr_typed/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = "attr_typed"
8
9
  spec.version = AttrTyped::VERSION
9
- spec.authors = ["Anthony Langhorne"]
10
- spec.email = ["anthony.langhorne@ferocia.com.au"]
10
+ spec.authors = ["Anthony Langhorne", "Tom Meier"]
11
+ spec.email = ["anthony.langhorne@ferocia.com.au", "thomas.meier@ferocia.com.au"]
11
12
 
12
- spec.summary = %q{Enforce attribute types at assignment time}
13
+ spec.summary = "Enforce attribute types at assignment time"
13
14
  spec.homepage = "https://github.com/Ferocia/attr_typed"
14
15
  spec.license = "MIT"
15
16
 
17
+ spec.required_ruby_version = '>= 2.4.0'
18
+
16
19
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
20
  spec.require_paths = ["lib"]
18
21
 
19
22
  spec.add_dependency 'monetize', '>= 1.0.0'
20
23
 
21
- spec.add_development_dependency "bundler", "~> 1.10"
22
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "bundler", "~> 2.1.4"
25
+ spec.add_development_dependency "rake", "~> 12.0"
23
26
  spec.add_development_dependency "rspec"
24
27
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "monetize"
2
4
  require "money"
3
5
  require "bigdecimal"
@@ -16,9 +18,9 @@ require "date"
16
18
  # - Due to the way string.to_f works in ruby, self.my_field = "cats" will equal $0.00
17
19
  #
18
20
  module AttrTyped
19
- ALLOWED_TYPES ||= [
20
- :string, :money, :time, :big_decimal, :date, :integer, :boolean, :date_time
21
- ]
21
+ ALLOWED_TYPES ||= %i[
22
+ string money time big_decimal date integer strict_integer boolean date_time
23
+ ].freeze
22
24
 
23
25
  def self.included(klass)
24
26
  klass.extend(ClassMethods)
@@ -31,9 +33,7 @@ module AttrTyped
31
33
  def parse_typed_value(value, type)
32
34
  public_send("parse_#{type}", value) unless value.nil?
33
35
  rescue ArgumentError => e
34
- if AttrTyped.logger
35
- AttrTyped.logger.error("Error parsing '#{value}' into a #{type}")
36
- end
36
+ AttrTyped&.logger&.error("Error parsing '#{value}' into a #{type}")
37
37
  raise e
38
38
  end
39
39
 
@@ -47,6 +47,15 @@ module AttrTyped
47
47
  value.to_i
48
48
  end
49
49
 
50
+ def parse_strict_integer(value)
51
+ return value if value.nil? || value.is_a?(Integer)
52
+ return value.to_i if value.is_a?(Float) || value.is_a?(BigDecimal)
53
+
54
+ Integer(value, 10)
55
+ rescue ArgumentError
56
+ nil
57
+ end
58
+
50
59
  def parse_date(value)
51
60
  return value if value.is_a?(Date)
52
61
 
@@ -67,13 +76,17 @@ module AttrTyped
67
76
  return value if value.is_a?(BigDecimal)
68
77
  return value.to_d if value.is_a?(Float)
69
78
 
70
- BigDecimal.new(value)
79
+ BigDecimal(value)
80
+ rescue ArgumentError
81
+ BigDecimal(0)
71
82
  end
72
83
 
73
84
  def parse_money(value)
74
85
  return value if value.is_a?(Money)
75
86
 
76
- Monetize.from_bigdecimal(BigDecimal.new(value.to_s))
87
+ Monetize.from_bigdecimal(BigDecimal(value.to_s))
88
+ rescue ArgumentError
89
+ Money.new(0)
77
90
  end
78
91
 
79
92
  def parse_time(value)
@@ -88,7 +101,7 @@ module AttrTyped
88
101
  return if value.nil? && !value.is_a?(FalseClass)
89
102
  return value if value.is_a?(TrueClass) || value.is_a?(FalseClass)
90
103
 
91
- ["true", "y"].include?(value.to_s.downcase)
104
+ %w[true y].include?(value.to_s.downcase)
92
105
  end
93
106
 
94
107
  # Class method attr_typed
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AttrTyped
2
- VERSION = "1.0.0"
4
+ VERSION = "1.0.5"
3
5
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attr_typed
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Langhorne
8
+ - Tom Meier
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2016-07-21 00:00:00.000000000 Z
12
+ date: 2020-08-28 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: monetize
@@ -30,28 +31,28 @@ dependencies:
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: '1.10'
34
+ version: 2.1.4
34
35
  type: :development
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: '1.10'
41
+ version: 2.1.4
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: rake
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - "~>"
46
47
  - !ruby/object:Gem::Version
47
- version: '10.0'
48
+ version: '12.0'
48
49
  type: :development
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
53
  - - "~>"
53
54
  - !ruby/object:Gem::Version
54
- version: '10.0'
55
+ version: '12.0'
55
56
  - !ruby/object:Gem::Dependency
56
57
  name: rspec
57
58
  requirement: !ruby/object:Gem::Requirement
@@ -69,10 +70,12 @@ dependencies:
69
70
  description:
70
71
  email:
71
72
  - anthony.langhorne@ferocia.com.au
73
+ - thomas.meier@ferocia.com.au
72
74
  executables: []
73
75
  extensions: []
74
76
  extra_rdoc_files: []
75
77
  files:
78
+ - ".gitignore"
76
79
  - ".rspec"
77
80
  - Gemfile
78
81
  - LICENSE.txt
@@ -93,15 +96,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
96
  requirements:
94
97
  - - ">="
95
98
  - !ruby/object:Gem::Version
96
- version: '0'
99
+ version: 2.4.0
97
100
  required_rubygems_version: !ruby/object:Gem::Requirement
98
101
  requirements:
99
102
  - - ">="
100
103
  - !ruby/object:Gem::Version
101
104
  version: '0'
102
105
  requirements: []
103
- rubyforge_project:
104
- rubygems_version: 2.4.5
106
+ rubygems_version: 3.1.4
105
107
  signing_key:
106
108
  specification_version: 4
107
109
  summary: Enforce attribute types at assignment time