u-attributes 2.7.0 → 2.8.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: c330847c820a244e35afcd702510d791a72822677ad97a4050b37dc0a9653a00
4
- data.tar.gz: 66f7e86e1c1579f64d39e77c54eac7fab03551dbbc8fd6ce02438fab817c0939
3
+ metadata.gz: 75a44be0f1b71d41abdfd3e9c81f67527760a4a8f0202818fd7f04782680922b
4
+ data.tar.gz: bbb26faf04daffd2e92b18eb4e363d85c7677ed5ed3fb09bda485d8b34c8296d
5
5
  SHA512:
6
- metadata.gz: d06af39a1601f4ba9496e5daec023cb13d1944f0ab2b986320a365788df2208fecf1122c73d023c669647fb3f826eca15d0f4bf132872c6b84459bd13c8037ce
7
- data.tar.gz: 16bd3897ce372901db54506761dffbc3ba42a72e6700fabc0db83fedad6ab8eaf9bb69f1d98c26e4c0eee809311d51926431807fde187af3b80a6cdba2d73f78
6
+ metadata.gz: 9e7da00d4786086edc9607533ef9c9632b10dd2200ddee29a46551d311c8e5ee8c5549d161f8ea6881c95c529abbdd4a2c48fd28635464606a7877b0d94a6488
7
+ data.tar.gz: aa42ef9c78b7f60514ef062b78d1b6f4eb3589ce1d39ab13d6459d2a164e3dcfa8b4f54660598df76afe4b42b8087cf9060f57398609f59508952bfd49c0cda1
@@ -0,0 +1,27 @@
1
+
2
+ name: build
3
+ on: [push]
4
+ jobs:
5
+ test:
6
+ runs-on: ubuntu-latest
7
+ strategy:
8
+ matrix:
9
+ ruby: [2.2, 2.3, 2.4, 2.5, 2.6, 3.0]
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: ${{ matrix.ruby }}
15
+ bundler-cache: true
16
+ - name: Test and generate coverage
17
+ run: bin/test
18
+ - name: Format coverage
19
+ if: ${{ matrix.ruby >= 3 }}
20
+ run: bin/prepare_coverage
21
+ - uses: paambaati/codeclimate-action@v2.7.5
22
+ if: ${{ matrix.ruby >= 3 }}
23
+ env:
24
+ CC_TEST_REPORTER_ID: 9015766fe58e0abd5ab58050ddfc67708e0b11430b3d3999ac17139ffcb4d3e7
25
+ with:
26
+ debug: true
27
+ coverageLocations: coverage/.resultset.json:simplecov
@@ -0,0 +1,8 @@
1
+ {
2
+ "cSpell.enabled": true,
3
+ "cSpell.ignoreWords": [
4
+ "paambaati",
5
+ "resultset",
6
+ "simplecov"
7
+ ]
8
+ }
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'u-case', '~> 4.0'
3
+ gem 'u-case', '~> 4.5', '>= 4.5.1'
4
4
 
5
5
  activemodel_version = ENV['ACTIVEMODEL_VERSION']
6
6
 
@@ -20,7 +20,7 @@ simplecov_version =
20
20
  case RUBY_VERSION
21
21
  when /\A2.[23]/ then '0.17.1'
22
22
  when /\A2.4/ then '~> 0.18.5'
23
- else '~> 0.19'
23
+ else '~> 0.21.2'
24
24
  end
25
25
 
26
26
  group :test do
data/README.md CHANGED
@@ -12,8 +12,8 @@
12
12
  <img alt="Gem" src="https://img.shields.io/gem/v/u-attributes.svg?style=flat-square">
13
13
  </a>
14
14
 
15
- <a href="https://travis-ci.com/serradura/u-attributes">
16
- <img alt="Build Status" src="https://travis-ci.com/serradura/u-attributes.svg?branch=main">
15
+ <a href="https://github.com/serradura/u-attributes/actions/workflows/ci.yml">
16
+ <img alt="Build Status" src="https://github.com/serradura/u-attributes/actions/workflows/ci.yml/badge.svg">
17
17
  </a>
18
18
 
19
19
  <a href="https://codeclimate.com/github/serradura/u-attributes/maintainability">
@@ -33,7 +33,7 @@ So, if you change [[1](#with_attribute)] [[2](#with_attributes)] an attribute of
33
33
  Version | Documentation
34
34
  ---------- | -------------
35
35
  unreleased | https://github.com/serradura/u-case/blob/main/README.md
36
- 2.7.0 | https://github.com/serradura/u-case/blob/v2.x/README.md
36
+ 2.8.0 | https://github.com/serradura/u-case/blob/v2.x/README.md
37
37
  1.2.0 | https://github.com/serradura/u-case/blob/v1.x/README.md
38
38
 
39
39
  # Table of contents <!-- omit in toc -->
@@ -94,7 +94,7 @@ gem 'u-attributes'
94
94
  | u-attributes | branch | ruby | activemodel |
95
95
  | -------------- | ------- | -------- | ------------- |
96
96
  | unreleased | main | >= 2.2.0 | >= 3.2, < 7 |
97
- | 2.7.0 | v2.x | >= 2.2.0 | >= 3.2, < 7 |
97
+ | 2.8.0 | v2.x | >= 2.2.0 | >= 3.2, < 7 |
98
98
  | 1.2.0 | v1.x | >= 2.2.0 | >= 3.2, < 6.1 |
99
99
 
100
100
  > **Note**: The activemodel is an optional dependency, this module [can be enabled](#activemodelvalidation-extension) to validate the attributes.
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ # Borrowed from https://gist.github.com/qortex/7e7c49f3731391a91ee898336183acef
4
+
5
+ # Temporary hack to get CodeClimate to work with SimpleCov 0.18 JSON format until issue is fixed
6
+ # upstream: https://github.com/codeclimate/test-reporter/issues/413
7
+
8
+ require "json"
9
+
10
+ filename = "coverage/.resultset.json"
11
+ contents = JSON.parse(File.read(filename))
12
+
13
+ def remove_lines_key(obj)
14
+ case obj
15
+ when Hash
16
+ obj.transform_values do |val|
17
+ val.is_a?(Hash) && val.key?("lines") ? val["lines"] : remove_lines_key(val)
18
+ end
19
+ else
20
+ obj
21
+ end
22
+ end
23
+
24
+ # overwrite
25
+ File.write(filename, JSON.generate(remove_lines_key(contents)))
26
+
27
+ puts Dir['coverage/.*.json']
data/bin/test ADDED
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ RUBY_V=$(ruby -v)
6
+
7
+ function reset_gemfile_and_test {
8
+ rm Gemfile.lock
9
+
10
+ eval "$1 bundle update"
11
+ eval "$1 bundle exec rake test"
12
+ }
13
+
14
+ function test_with_activemodel {
15
+ reset_gemfile_and_test "ACTIVEMODEL_VERSION=$1"
16
+ }
17
+
18
+ RUBY_2_2345="ruby 2.[2345]."
19
+ RUBY_2_234="ruby 2.[234]."
20
+ RUBY_2_567="ruby 2.[567]."
21
+ RUBY_2_2="ruby 2.2."
22
+ RUBY_3_X="ruby 3.0."
23
+
24
+ if [[ $RUBY_V =~ $RUBY_2_2345 ]]; then
25
+ if [[ $RUBY_V =~ $RUBY_2_234 ]]; then
26
+ reset_gemfile_and_test
27
+ fi
28
+
29
+ if [[ $RUBY_V =~ $RUBY_2_2 ]]; then
30
+ test_with_activemodel "3.2"
31
+ fi
32
+
33
+ test_with_activemodel "4.0"
34
+ test_with_activemodel "4.1"
35
+ test_with_activemodel "4.2"
36
+ test_with_activemodel "5.0"
37
+ test_with_activemodel "5.1"
38
+ test_with_activemodel "5.2"
39
+ fi
40
+
41
+ if [[ $RUBY_V =~ $RUBY_2_567 ]] || [[ $RUBY_V =~ $RUBY_3_X ]]; then
42
+ gem install bundler -v ">= 2" --no-doc
43
+
44
+ reset_gemfile_and_test
45
+
46
+ test_with_activemodel "6.0"
47
+ test_with_activemodel "6.1"
48
+ fi
@@ -35,10 +35,10 @@ module Micro::Attributes
35
35
 
36
36
  KeepProc = -> validation_data { validation_data[0] == :accept && validation_data[1] == Proc }
37
37
 
38
- def __attribute_assign(key, initialize_value, attribute_data)
38
+ def __attribute_assign(key, init_hash, attribute_data)
39
39
  validation_data = attribute_data[1]
40
40
 
41
- value_to_assign = FetchValueToAssign.(initialize_value, attribute_data, KeepProc.(validation_data))
41
+ value_to_assign = FetchValueToAssign.(init_hash, init_hash[key], attribute_data, KeepProc.(validation_data))
42
42
 
43
43
  value = __attributes[key] = instance_variable_set("@#{key}", value_to_assign)
44
44
 
@@ -179,6 +179,16 @@ module Micro
179
179
  __attribute_assign(name, false, options)
180
180
  end
181
181
 
182
+ RaiseKindError = ->(expected, given) do
183
+ if (util = Kind.const_get(:KIND, false)) && util.respond_to?(:error!)
184
+ util.error!(expected, given)
185
+ else
186
+ raise Kind::Error.new(expected, given, label: nil)
187
+ end
188
+ end
189
+
190
+ private_constant :RaiseKindError
191
+
182
192
  def attributes(*args)
183
193
  return __attributes.to_a if args.empty?
184
194
 
@@ -191,7 +201,7 @@ module Micro
191
201
  if arg.is_a?(String) || arg.is_a?(Symbol)
192
202
  __attribute_assign(arg, false, options)
193
203
  else
194
- Kind::KIND.error!('String/Symbol'.freeze, arg)
204
+ RaiseKindError.call('String/Symbol'.freeze, arg)
195
205
  end
196
206
  end
197
207
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Micro
4
4
  module Attributes
5
- VERSION = '2.7.0'.freeze
5
+ VERSION = '2.8.0'.freeze
6
6
  end
7
7
  end
@@ -123,12 +123,16 @@ module Micro
123
123
  @__attributes ||= {}
124
124
  end
125
125
 
126
- FetchValueToAssign = -> (value, attribute_data, keep_proc = false) do
126
+ FetchValueToAssign = -> (init_hash, value, attribute_data, keep_proc = false) do
127
127
  default = attribute_data[0]
128
128
 
129
129
  value_to_assign =
130
130
  if default.is_a?(Proc) && !keep_proc
131
- default.arity > 0 ? default.call(value) : default.call
131
+ case default.arity
132
+ when 0 then default.call
133
+ when 2 then default.call(value, init_hash)
134
+ else default.call(value)
135
+ end
132
136
  else
133
137
  value.nil? ? default : value
134
138
  end
@@ -143,14 +147,14 @@ module Micro
143
147
 
144
148
  def __attributes_assign(hash)
145
149
  self.class.__attributes_data__.each do |name, attribute_data|
146
- __attribute_assign(name, hash[name], attribute_data) if attribute?(name, true)
150
+ __attribute_assign(name, hash, attribute_data) if attribute?(name, true)
147
151
  end
148
152
 
149
153
  __attributes.freeze
150
154
  end
151
155
 
152
- def __attribute_assign(name, initialize_value, attribute_data)
153
- value_to_assign = FetchValueToAssign.(initialize_value, attribute_data)
156
+ def __attribute_assign(name, init_hash, attribute_data)
157
+ value_to_assign = FetchValueToAssign.(init_hash, init_hash[name], attribute_data)
154
158
 
155
159
  ivar_value = instance_variable_set("@#{name}", value_to_assign)
156
160
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: u-attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-22 00:00:00.000000000 Z
11
+ date: 2021-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kind
@@ -67,16 +67,18 @@ executables: []
67
67
  extensions: []
68
68
  extra_rdoc_files: []
69
69
  files:
70
+ - ".github/workflows/ci.yml"
70
71
  - ".gitignore"
71
- - ".travis.sh"
72
- - ".travis.yml"
72
+ - ".vscode/settings.json"
73
73
  - CODE_OF_CONDUCT.md
74
74
  - Gemfile
75
75
  - LICENSE.txt
76
76
  - README.md
77
77
  - Rakefile
78
78
  - bin/console
79
+ - bin/prepare_coverage
79
80
  - bin/setup
81
+ - bin/test
80
82
  - lib/micro/attributes.rb
81
83
  - lib/micro/attributes/diff.rb
82
84
  - lib/micro/attributes/features.rb
@@ -91,13 +93,12 @@ files:
91
93
  - lib/micro/attributes/utils.rb
92
94
  - lib/micro/attributes/version.rb
93
95
  - lib/u-attributes.rb
94
- - test.sh
95
96
  - u-attributes.gemspec
96
97
  homepage: https://github.com/serradura/u-attributes
97
98
  licenses:
98
99
  - MIT
99
100
  metadata: {}
100
- post_install_message:
101
+ post_install_message:
101
102
  rdoc_options: []
102
103
  require_paths:
103
104
  - lib
@@ -112,8 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
113
  - !ruby/object:Gem::Version
113
114
  version: '0'
114
115
  requirements: []
115
- rubygems_version: 3.1.4
116
- signing_key:
116
+ rubygems_version: 3.2.17
117
+ signing_key:
117
118
  specification_version: 4
118
119
  summary: Create "immutable" objects with no setters, just getters.
119
120
  test_files: []
data/.travis.sh DELETED
@@ -1,45 +0,0 @@
1
- #!/bin/bash
2
-
3
- RUBY_V=$(ruby -v)
4
-
5
- function run_with_bundler {
6
- rm Gemfile.lock
7
-
8
- if [ ! -z "$1" ]; then
9
- bundle_cmd="bundle _$1_"
10
- else
11
- bundle_cmd="bundle"
12
- fi
13
-
14
- eval "$2 $bundle_cmd update"
15
- eval "$2 $bundle_cmd exec rake test"
16
- }
17
-
18
- function run_with_am_version_and_bundler {
19
- run_with_bundler "$2" "ACTIVEMODEL_VERSION=$1"
20
- }
21
-
22
- RUBY_2_2345="ruby 2.[2345]."
23
-
24
- if [[ $RUBY_V =~ $RUBY_2_2345 ]]; then
25
- run_with_bundler "$BUNDLER_V1"
26
-
27
- run_with_am_version_and_bundler "3.2" "$BUNDLER_V1"
28
- run_with_am_version_and_bundler "4.0" "$BUNDLER_V1"
29
- run_with_am_version_and_bundler "4.1" "$BUNDLER_V1"
30
- run_with_am_version_and_bundler "4.2" "$BUNDLER_V1"
31
- run_with_am_version_and_bundler "5.0" "$BUNDLER_V1"
32
- run_with_am_version_and_bundler "5.1" "$BUNDLER_V1"
33
- run_with_am_version_and_bundler "5.2" "$BUNDLER_V1"
34
- fi
35
-
36
- RUBY_2_567="ruby 2.[567]."
37
- RUBY_3_x_x="ruby 3.0."
38
-
39
- if [[ $RUBY_V =~ $RUBY_2_567 ]] || [[ $RUBY_V =~ $RUBY_3_x_x ]]; then
40
- gem install bundler -v ">= 2" --no-doc
41
-
42
- run_with_bundler
43
- run_with_am_version_and_bundler "6.0"
44
- run_with_am_version_and_bundler "6.1"
45
- fi
data/.travis.yml DELETED
@@ -1,33 +0,0 @@
1
- language: ruby
2
-
3
- cache:
4
- bundler: true
5
- directories:
6
- - /home/travis/.rvm/
7
-
8
- rvm:
9
- - 2.2.2
10
- - 2.3.0
11
- - 2.4.0
12
- - 2.5.0
13
- - 2.6.0
14
- - 2.7.0
15
- - 3.0.0
16
-
17
- env:
18
- - BUNDLER_V1="1.17.3"
19
-
20
- before_install:
21
- - gem install bundler -v "$BUNDLER_V1"
22
-
23
- install: bundle install --jobs=3 --retry=3
24
-
25
- before_script:
26
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
27
- - chmod +x ./cc-test-reporter
28
- - "./cc-test-reporter before-build"
29
-
30
- script: "./.travis.sh"
31
-
32
- after_success:
33
- - "./cc-test-reporter after-build -t simplecov"
data/test.sh DELETED
@@ -1,11 +0,0 @@
1
- #!/bin/bash
2
-
3
- source $(dirname $0)/.travis.sh
4
-
5
- echo ''
6
- echo 'Resetting Gemfile'
7
- echo ''
8
-
9
- rm Gemfile.lock
10
-
11
- bundle