attr_typed 1.0.0 → 1.0.5

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
- 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