alba 1.5.0 → 2.0.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: 34c441cbc87f959f73c3e7a0175309f780b23ce840add4d53cf5083488390f1f
4
- data.tar.gz: f78fb2eea40f502c6f7b3c905317616054bd397d30aa9ce979285003205c81af
3
+ metadata.gz: e445a59555f43f7c601699a3a2ceee967d33a37ea77f2b15a0e806dec0dfc5b8
4
+ data.tar.gz: 3506f93a8fd9c00c5d8d85566f41032f3bc23356c753d202ce48e9ba984f1acc
5
5
  SHA512:
6
- metadata.gz: 326ac8e731f2b4e0fe4afbb8f690059ecd578ffcb9270b9779bdcb6bb50d57d063ec0a98fc488398915c39ca2978b41e79d53bb1f5a809f9272ad885c383a549
7
- data.tar.gz: 2b36eb5d07749505b4ab377b56cc7e564bcd6e86d872e7cb2c45f62ae2cf91a41b2c6e0b70cdcbb8d2a5d802528e4d9bfb113b723a2be7b1bdbc207c0277df45
6
+ metadata.gz: 46251245a639ad19d4c75d9b3afee2f9afdd19380ae70c1a1113ccc96966402bfff6434ac2fef9cdef4785873438d6ba828ee64712a8757dc497798fd890337a
7
+ data.tar.gz: ce096713947ae541071331d67212dc1fb35957dd7849b8d87b98ce6a8eda05b867406ec4ffad2d64eb76fcfe2a5d8be16486f2f4cd2c88e82c259b0e58b37887
data/.codeclimate.yml ADDED
@@ -0,0 +1,11 @@
1
+ version: "2" # required to adjust maintainability checks
2
+
3
+ checks:
4
+ method-complexity:
5
+ enabled: true
6
+ config:
7
+ threshold: 7
8
+
9
+ exclude_patterns:
10
+ - "benchmark/**/*"
11
+ - "script/**/*"
@@ -1,26 +1,12 @@
1
1
  version: 2
2
2
  updates:
3
+ - package-ecosystem: github-actions
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
3
7
  - package-ecosystem: bundler
4
8
  directory: "/"
5
9
  schedule:
6
10
  interval: daily
7
11
  time: "20:00"
8
12
  open-pull-requests-limit: 10
9
- ignore:
10
- - dependency-name: rubocop
11
- versions:
12
- - 1.12.0
13
- - 1.9.0
14
- - dependency-name: rubocop-performance
15
- versions:
16
- - 1.10.0
17
- - 1.10.2
18
- - dependency-name: oj
19
- versions:
20
- - 3.11.3
21
- - dependency-name: minitest
22
- versions:
23
- - 5.14.4
24
- - dependency-name: activesupport
25
- versions:
26
- - 6.1.2
@@ -0,0 +1,70 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ main ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ main ]
20
+ schedule:
21
+ - cron: '21 4 * * 5'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v3
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v2
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
52
+
53
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
+ # If this step fails, then you should remove it and run the build manually (see below)
55
+ - name: Autobuild
56
+ uses: github/codeql-action/autobuild@v2
57
+
58
+ # ℹ️ Command-line programs to run using the OS shell.
59
+ # 📚 https://git.io/JvXDl
60
+
61
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
62
+ # and modify them (or add more) to build your code if your project
63
+ # uses a compiled language
64
+
65
+ #- run: |
66
+ # make bootstrap
67
+ # make release
68
+
69
+ - name: Perform CodeQL Analysis
70
+ uses: github/codeql-action/analyze@v2
@@ -8,7 +8,7 @@ jobs:
8
8
  fail-fast: false
9
9
  matrix:
10
10
  os: [ubuntu-latest, windows-latest, macos-latest]
11
- ruby: [2.5, 2.6, 2.7, 3.0, head, jruby, truffleruby]
11
+ ruby: [2.6, 2.7, 3.0, 3.1, head, jruby, truffleruby]
12
12
  gemfile: [all, without_active_support, without_oj]
13
13
  exclude:
14
14
  - os: windows-latest
@@ -17,9 +17,9 @@ jobs:
17
17
  ruby: truffleruby
18
18
  runs-on: ${{ matrix.os }}
19
19
  env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
20
- BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
20
+ BUNDLE_GEMFILE: ${{ (matrix.gemfile == 'without_active_support' && 'gemfiles/without_active_support.gemfile') || (matrix.gemfile == 'without_oj' && 'gemfiles/without_oj.gemfile') || null }}
21
21
  steps:
22
- - uses: actions/checkout@v2
22
+ - uses: actions/checkout@v3
23
23
  - name: Set up Ruby
24
24
  uses: ruby/setup-ruby@v1
25
25
  with:
@@ -29,6 +29,6 @@ jobs:
29
29
  run: |
30
30
  bundle exec rake
31
31
  - name: CodeCov
32
- uses: codecov/codecov-action@v1
32
+ uses: codecov/codecov-action@v3
33
33
  with:
34
34
  files: ./coverage/coverage.xml
@@ -7,10 +7,10 @@ jobs:
7
7
  strategy:
8
8
  fail-fast: false
9
9
  matrix:
10
- ruby: [2.5, 2.6, 2.7, 3.0]
10
+ ruby: [2.7, 3.0, 3.1]
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
- - uses: actions/checkout@v2
13
+ - uses: actions/checkout@v3
14
14
  - name: Set up Ruby
15
15
  uses: ruby/setup-ruby@v1
16
16
  with:
data/.rubocop.yml CHANGED
@@ -16,7 +16,7 @@ AllCops:
16
16
  - 'script/**/*.rb'
17
17
  NewCops: enable
18
18
  EnabledByDefault: true
19
- TargetRubyVersion: 2.5
19
+ TargetRubyVersion: 2.6
20
20
 
21
21
  # Items in Gemfile is dev dependencies and we don't have to specify versions.
22
22
  Bundler/GemVersion:
@@ -46,12 +46,15 @@ Metrics:
46
46
  - 'test/**/*.rb'
47
47
 
48
48
  # `Resource` module is a core module and its length tends to be long...
49
+ # `Alba` main module is also long because it has all parts of configuration
49
50
  Metrics/ModuleLength:
50
51
  Exclude:
51
52
  - 'lib/alba/resource.rb'
53
+ - 'lib/alba.rb'
52
54
 
53
55
  # Resource class includes DSLs, which tend to accept long list of parameters
54
56
  Metrics/ParameterLists:
57
+ Max: 7
55
58
  Exclude:
56
59
  - 'test/**/*.rb'
57
60
 
@@ -63,6 +66,7 @@ Security/Eval:
63
66
  Style/ConstantVisibility:
64
67
  Exclude:
65
68
  - 'lib/alba/version.rb'
69
+ - 'test/**/*.rb'
66
70
 
67
71
  Style/Copyright:
68
72
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -6,6 +6,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.0.0] 2022-10-21
10
+
11
+ ### Breaking changes
12
+
13
+ - All Hash-related methods now return String key instead of Symbol key
14
+ This affects all users, but you can use `deep_symbolize_keys` in Rails environment if you prefer Symbol keys
15
+ Some DSLs that take key argument such as `on_nil` and `on_error`, are also affected
16
+
17
+ ### New features
18
+
19
+ - Passing an initial object to proc function in associations
20
+ - Allow association resource to be Proc
21
+ - `collection_key` to serialize collection into a Hash
22
+ - params is now overridable
23
+ - Key transformation now cascades
24
+ - nested attribute
25
+ - Implement `as_json`
26
+
27
+ ### Bugfix
28
+
29
+ - fix the bug where nesting is empty string and invalid
30
+ - `handle_error` now raises the same error
31
+ - let Rails implicitly call `to_json`
32
+
33
+ ## [1.6.0] 2022-03-16
34
+
35
+ - [Feat] Support instance method as an attribute
36
+ - [Fix] Explicitly raise error when inference is disabled
37
+ - [Improve] `enable_inference!` now takes inflector as argument
38
+ - [Improve] `transform_keys` now accepts `:snake` and `:none`
39
+ - [Deprecate] `to_hash` is special method and should not be used
40
+ - [Deprecate] `ignoring` in favor of `attributes` overriding
41
+ - [Deprecate] `Alba.on_nil`, `Alba.on_error` and `Alba.enable_root_key_transformation!`
42
+
9
43
  ## [1.5.0] 2021-11-28
10
44
 
11
45
  - [Feat] Add nil handler
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,30 @@
1
+ # CONTRIBUTORS GUIDELINE
2
+
3
+ ## Welcome
4
+
5
+ Welcome to Alba, and thank you for being interested in contributing to Alba. This document describes how to contribute to Alba.
6
+
7
+ ## Code of Conduct
8
+
9
+ We have the [code of conduct](https://github.com/okuramasafumi/alba/blob/master/CODE_OF_CONDUCT.md) that all contributors are expected to adhere for Alba to be a safe and welcoming space.
10
+
11
+ ## Bugs and Issues
12
+
13
+ If you find any bugs or issues, please submit an issue on [GitHub](https://github.com/okuramasafumi/alba/issues). Please follow the issue template as much as possible so that maintainers can find and fix it quickly.
14
+
15
+ ## Feature Request
16
+
17
+ If you have any feature that you think Alba should have, please submit a feature request on [GitHub](https://github.com/okuramasafumi/alba/issues).
18
+
19
+ ## Pull Request
20
+
21
+ You're more than welcomed to submit a Pull Request! You are expected to follow these rules before submitting:
22
+
23
+ * You must split your Pull Request into multiple ones if you solve more than one problem
24
+ * You must write tests if you implement a feature or fix a bug
25
+ * You should provide reason(s) behind your change unless it's so simple
26
+
27
+ ## Documents
28
+
29
+ * [code of conduct](https://github.com/okuramasafumi/alba/blob/master/CODE_OF_CONDUCT.md) for all contributors
30
+ * [hacking document](https://github.com/okuramasafumi/alba/blob/master/DESIGN.md) for those who want to know the internal of Alba
data/Gemfile CHANGED
@@ -4,17 +4,21 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  gem 'activesupport', require: false # For backend
7
+ gem 'dry-inflector', require: false # For inflection
7
8
  gem 'ffaker', require: false # For testing
8
9
  gem 'inch', require: false # For inline documents
9
10
  gem 'minitest', '~> 5.14' # For test
10
11
  gem 'rake', '~> 13.0' # For test and automation
11
12
  gem 'rubocop', '>= 0.79.0', require: false # For lint
12
- gem 'rubocop-minitest', '~> 0.17.0', require: false # For lint
13
- gem 'rubocop-performance', '~> 1.12.0', require: false # For lint
13
+ gem 'rubocop-minitest', '~> 0.22.0', require: false # For lint
14
+ gem 'rubocop-performance', '~> 1.15.0', require: false # For lint
14
15
  gem 'rubocop-rake', '>= 0.5.1', require: false # For lint
15
16
  gem 'rubocop-sensible', '~> 0.3.0', require: false # For lint
17
+ gem 'ruby-lsp', require: false # For language server
16
18
  gem 'simplecov', '~> 0.21.0', require: false # For test coverage
17
19
  gem 'simplecov-cobertura', require: false # For test coverage
20
+ # gem 'steep', require: false # For language server and typing
21
+ # gem 'typeprof', require: false # For language server and typing
18
22
  gem 'yard', require: false # For documentation
19
23
 
20
24
  platforms :ruby do
data/HACKING.md ADDED
@@ -0,0 +1,41 @@
1
+ # Hacking document
2
+
3
+ This document is intended to provide detailed information about the internal design and implementation of Alba. You are recommended to read through it if you want to hack Alba.
4
+
5
+ ## Design
6
+
7
+ The design of Alba is simple. `Alba::Resource` module is the only interface end users use by `include`ing it. Other classes and modules are referenced by `Alba::Resource`.
8
+
9
+ When a class `include`s `Alba::Resource` module it defines `ClassMethods` such as `attributes` and `InstanceMethods` such as `serialize`. Instance methods work with information collected by class methods.
10
+
11
+ ## Methods
12
+
13
+ The main methods users directly use are listed below.
14
+
15
+ Class methods (DSL):
16
+
17
+ * `attribute` for block style attribute
18
+ * `attributes` for symbol style attribute
19
+ * `association` and its aliases such as `one` for association
20
+
21
+ Instance methods:
22
+
23
+ * `serializable_hash` and `to_h` for hash from target object
24
+ * `serialize` and `to_json` for serialized JSON string
25
+
26
+ Other methods are rather trivial. They'll be added to this list when it turned out it's important enough.
27
+
28
+ ## Implementation
29
+
30
+ In `Alba::Resource` module there are some things to note.
31
+
32
+ `@object` is an object for serialization. It's either singular object or collection.
33
+
34
+ Attribute object can be either `Symbol`, `Proc`, `Alba::Association` or `Alba::TypedAttribute`.
35
+
36
+ * `Symbol` attributes come from `attributes` method and are sent to `__send__` as method name
37
+ * `Proc` attributes come from `attribute` method and are `instance_exec`uted
38
+ * `Alba::Association` attributes come from `association` method and `to_h` method on the object is called
39
+ * `Alba::TypedAttribute` attributes come when users specify `type` option and `value` method on the object is called
40
+
41
+ When users provide `if` option, the attribute object becomes an `Array`. It contains two element, attribute itself and condition.