apiphobic-resource 1.1.0 → 1.3.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: 0dae97d487f9abece061556e3ba4cb71f1c058e7ececb8c4090a13d01ea8ba41
4
- data.tar.gz: ea0bef41133fa3c364cefb3038ce6b5520a9d88ad12777add602e77181dec244
3
+ metadata.gz: 903c1eaded9d586c56a64b3d37262e2928e2ec21d68038bf6d0e74ec706bb21b
4
+ data.tar.gz: 4ffbae8c2c18055f11a915f9b4fad69349ce272f4bd67c84aaf5b50139d0bff4
5
5
  SHA512:
6
- metadata.gz: ea6fe96e15112cd14cd31b6a531481eac33c0d439a89ca7776464f02770b2c16b838a531fb7fb7379237fda08234f318051fdd7e3fc6a01a56a6567f2e092339
7
- data.tar.gz: e29f086828c8ac680e9a09e8b8c57c62b4f51a5e5e60bf53b528549885dd8fef22c235b6691d0e853c78d02a8ea413761efe39faefa3b6c78480288f1b2f7183
6
+ metadata.gz: 452c15e4c4f3083d5661c0cb553064d72018a56aed0233c7d7a9c367b5ef2455fabaa8b379ab4e0367fbd0f83f7453c4ff3ae4976456bcc68bdf04d27bca688a
7
+ data.tar.gz: d461fe912e2329d3528d5697497a2fcd1e563ed1da675108a0a6e98c623141a6d68589abddcd0c4f7e412888f04e3886cf2a6d8d0ebedee5f72bd59edfad0911
checksums.yaml.gz.sig CHANGED
Binary file
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2016 The Kompanee, Ltd
1
+ Copyright (c) 2010-2019 The Kompanee, Ltd
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
@@ -5,7 +5,7 @@ module Parameters
5
5
  class Filter
6
6
  FLOAT = /\A[\-+]?[_\d]+\.[_\d]+\z/
7
7
  INTEGER = /\A[\-+]?[_\d]+\z/
8
- ISO8601 = /\d{4}\-\d{2}\-\d{2}T\d{2}\:\d{2}\:\d{2}(?:[+\-]\d{2}\:\d{2}|Z)/
8
+ ISO8601 = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:[+\-]\d{2}:\d{2}|Z)/
9
9
  NUMERICAL = /[\-+]?[_\d]+(?:\.\d+)?/
10
10
 
11
11
  DATE_RANGE = /\A(#{ISO8601})\.\.\.?(#{ISO8601})\z/
@@ -39,12 +39,11 @@ class Filter
39
39
  end
40
40
  end
41
41
 
42
- # rubocop:disable Lint/AssignmentInCondition, Metrics/AbcSize,
43
- # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
44
- def format_value(value)
42
+ # rubocop:disable Lint/AssignmentInCondition
43
+ def format_value(value) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
45
44
  return value unless value.is_a?(::String)
46
45
 
47
- if range_points = value.match(DATE_RANGE)
46
+ if range_points = value.match(DATE_RANGE)
48
47
  exclusive = value.include?('...')
49
48
  starting_point = ::Time.iso8601(range_points[1])
50
49
  ending_point = ::Time.iso8601(range_points[2])
@@ -66,17 +65,17 @@ class Filter
66
65
  value
67
66
  end
68
67
  end
69
- # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
70
- # rubocop:enable Lint/AssignmentInCondition, Metrics/AbcSize,
68
+ # rubocop:enable Lint/AssignmentInCondition
71
69
 
72
70
  def string_to_number(other)
73
71
  other = other.delete('_')
74
72
 
75
- if other == 'Infinity'
73
+ case other
74
+ when 'Infinity'
76
75
  9_999_999
77
- elsif other.match?(FLOAT)
76
+ when FLOAT
78
77
  other.to_f
79
- elsif other.match?(INTEGER)
78
+ when INTEGER
80
79
  other.to_i
81
80
  end
82
81
  end
@@ -23,9 +23,7 @@ class Include
23
23
 
24
24
  private
25
25
 
26
- # rubocop:disable Metrics/PerceivedComplexity,
27
- # rubocop:disable Metrics/BlockNesting
28
- def map_inclusions(array)
26
+ def map_inclusions(array) # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
29
27
  mapped = array.each_with_object([{}]) do |inclusion, memo|
30
28
  if inclusion.is_a?(::Hash)
31
29
  memo[0] = inclusion
@@ -37,7 +35,7 @@ class Include
37
35
  else
38
36
  memo.delete(first)
39
37
 
40
- memo[0][first] = if memo[0][first].nil?
38
+ memo[0][first] = if memo[0][first].nil? # rubocop:disable Metrics/BlockNesting
41
39
  rest
42
40
  else
43
41
  map_inclusions(Array(memo[0][first]) << rest)
@@ -50,8 +48,6 @@ class Include
50
48
 
51
49
  mapped
52
50
  end
53
- # rubocop:enable Metrics/BlockNesting
54
- # rubocop:enable Metrics/PerceivedComplexity,
55
51
  end
56
52
  end
57
53
  end
@@ -16,13 +16,13 @@ class Sort
16
16
  end
17
17
 
18
18
  def to_h
19
- @to_h ||= Hash[to_a]
19
+ @to_h ||= to_a.to_h
20
20
  end
21
21
 
22
22
  def to_a
23
23
  @to_a ||= raw_parameters.map do |raw_parameter|
24
24
  if raw_parameter.start_with?(DESCENDING_PREFIX)
25
- [raw_parameter[1..-1], 'desc']
25
+ [raw_parameter[1..], 'desc']
26
26
  else
27
27
  [raw_parameter, 'asc']
28
28
  end
@@ -6,6 +6,10 @@ module Apiphobic
6
6
  module Resource
7
7
  class Collection < Resource::Model
8
8
  DEFAULT_PROCESSORS = %w{including filtering sorting paging indexing}.freeze
9
+
10
+ def initialize(**args)
11
+ super(**args.merge(id: nil))
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -15,26 +15,35 @@ class Model
15
15
 
16
16
  DEFAULT_PROCESSORS = %w{including}.freeze
17
17
 
18
- attr_accessor :resource,
18
+ attr_accessor :id,
19
+ :resource,
19
20
  :parameters
20
21
  attr_reader :processors
21
22
 
22
- def_delegators :resource,
23
- :assign_attributes,
23
+ def_delegators :processed,
24
24
  :delete,
25
- :save!,
26
- :save
25
+ :subscribe
27
26
 
28
- def initialize(resource:, parameters:, **options)
27
+ def initialize(resource:, id:, parameters:, **options)
28
+ self.id = id
29
29
  self.resource = resource
30
30
  self.parameters = parameters.dup
31
31
  self.processors = options.fetch(:processors, self.class::DEFAULT_PROCESSORS)
32
32
  end
33
33
 
34
34
  def processed
35
- @processed ||= processors.inject(resource) do |processed_resource, processor|
36
- processor.processed(processed_resource, parameters)
37
- end
35
+ @processed \
36
+ ||= begin
37
+ processed = processors.inject(resource) do |processed_resource, processor|
38
+ processor.processed(processed_resource, parameters)
39
+ end
40
+
41
+ if instance_of?(::Apiphobic::Resource::Collection)
42
+ processed
43
+ else
44
+ processed.find_by(id: id) || processed.new
45
+ end
46
+ end
38
47
  end
39
48
 
40
49
  def meta
@@ -43,6 +52,24 @@ class Model
43
52
  end
44
53
  end
45
54
 
55
+ def assign_attributes(attrs)
56
+ processed.assign_attributes(attrs)
57
+
58
+ processed
59
+ end
60
+
61
+ def save!
62
+ processed.save!
63
+
64
+ processed
65
+ end
66
+
67
+ def save
68
+ processed.save
69
+
70
+ processed
71
+ end
72
+
46
73
  def processors=(other)
47
74
  @processors = other.map do |processor|
48
75
  Object.const_get("::Apiphobic::Resource::Processors::#{processor.capitalize}")
@@ -30,7 +30,7 @@ class Filtering
30
30
 
31
31
  if !filter_method
32
32
  filtered_resource
33
- elsif filter_method.arity.zero?
33
+ elsif filter_method.arity == 0
34
34
  filtered_resource.public_send(filter_method.name)
35
35
  else
36
36
  filtered_resource.public_send(filter_method.name, value)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Apiphobic
4
4
  module Resource
5
- VERSION = '1.1.0'
5
+ VERSION = '1.3.0'
6
6
  end
7
7
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apiphobic-resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thegranddesign
@@ -10,28 +10,34 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBNMREwDwYDVQQDDAhydWJ5
14
- Z2VtczEjMCEGCgmSJomT8ixkARkWE2xpdmluZ2hpZ2hvbnRoZWJsb2cxEzARBgoJ
15
- kiaJk/IsZAEZFgNjb20wHhcNMTcwODAyMjI1OTM1WhcNMTgwODAyMjI1OTM1WjBN
16
- MREwDwYDVQQDDAhydWJ5Z2VtczEjMCEGCgmSJomT8ixkARkWE2xpdmluZ2hpZ2hv
17
- bnRoZWJsb2cxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUA
18
- A4IBDwAwggEKAoIBAQDtLa7+7p49gW15OgOyRZad/F92iZcMdDjZ2kAxZlviXgVe
19
- PCtjfdURobH+YMdt++6eRkE25utIFqHyN51Shxfdc21T3fPQe/ZEoMyiJK4tYzbh
20
- 7VjNJG4ldvKKpS1p7iVz9imnyTxNwb0JaIOsOFCA04T0u6aCQi2acNvAPLviXk0q
21
- xJ/CKjI4QUTZKVrBt8Q1Egrp2yzmEnSNftDuTbBb8m4vDR+w325CwbKCgycHJ1/g
22
- YZ3FO76TzJuRVbsYS/bU5XKHVEpkeFmWBqEXsk4DuUIWLa6WZEJcoZf+YP+1pycG
23
- 7YqSbydpINtEdopD+EEI+g+zNJ4nSI8/eQcQyEjBAgMBAAGjgZQwgZEwCQYDVR0T
24
- BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFDWuVrg4ve0vLu71kqiGdyBnzJGV
25
- MCsGA1UdEQQkMCKBIHJ1YnlnZW1zQGxpdmluZ2hpZ2hvbnRoZWJsb2cuY29tMCsG
26
- A1UdEgQkMCKBIHJ1YnlnZW1zQGxpdmluZ2hpZ2hvbnRoZWJsb2cuY29tMA0GCSqG
27
- SIb3DQEBBQUAA4IBAQDJIpHjbBPGiaY4wOHcXlltQ+BMmhWQNh+1fZtyajQd+7Ay
28
- fv23mO7Mf25Q38gopQlpaODkfxq54Jt8FvQbr5RYRS4j+JEKb75NgrAtehd8USUd
29
- CiJJGH+yvGNWug9IGZCGX91HIbTsLQ5IUUWQasC5jGP8nxXufUr9xgAJZZenewny
30
- B2qKu8q1A/kj6cw62RCY7yBmUXxlcJBj8g+JKYAFbYYKUdQSzf50k9IiWLWunJM+
31
- Y2GAoHKstmfIVhc4XHOPpmTd2o/C29O9oaRgjrkfQEhF/KvJ/PhoV5hvokzsCyI5
32
- iUeXPfvrGD/itYIBCgk+fnzyQQ4QtE5hTQaWQ3o2
13
+ MIIEyjCCAzKgAwIBAgIBATANBgkqhkiG9w0BAQsFADBVMSIwIAYDVQQDDBlsb2Nh
14
+ bGV1bmtub3duODEwX3J1YnlnZW1zMRowGAYKCZImiZPyLGQBGRYKcHJvdG9ubWFp
15
+ bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yMjA3MDkwNTMxMjJaFw0yMzA3MDkw
16
+ NTMxMjJaMFUxIjAgBgNVBAMMGWxvY2FsZXVua25vd244MTBfcnVieWdlbXMxGjAY
17
+ BgoJkiaJk/IsZAEZFgpwcm90b25tYWlsMRMwEQYKCZImiZPyLGQBGRYDY29tMIIB
18
+ ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0otlhSPyU7jLLW1p786Mo/pV
19
+ 5cJ1Ed8D/bJK78PqGFO2h0ZUefupxT5PRMokLYNNGRPopnAAxZ0zVxJ68aOyYCBW
20
+ Wk3/XFcXCrtk/OcFwLTltgeMjyqCBd/zRRx6CCjY4uOfH0E3n1gQ6Fbmewjg83XJ
21
+ nOs7Gu/hzj5+feEQ1Exmg6z1oCM/8BTIBtK+p++HvcDK3AhJ7x3fc6P9WS+22w6j
22
+ 7jpi3p9YtoAjrXIzw3lsobiX+bEt+N+T47e8gOATVgapuZ/QmJzNU6LWepehs4V1
23
+ 8J+FUaIMV7nAMKmpkbYL51uHEiGV+HDx1HUdOsCFx8zD4h49KRT2t6AcumJ5P1Cj
24
+ c7NX2xl85ShHDNNFkozuC2c5cwj6F20EVaVjGwv2OFq0S2tUw9EJXHTN9RpfRUmn
25
+ IHwS9M4gcJO7IzV39a1YL6+9hrabF4+JTSYDehq8oxTdcOPLYyvH54aJWVqCrnLO
26
+ KNa/p6hMmwxTWNS5Vz0uxuEGyE9E0tHbtjIs2XX5AgMBAAGjgaQwgaEwCQYDVR0T
27
+ BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFAK3RicwO0f6+puFN6lRVMOKMJuu
28
+ MDMGA1UdEQQsMCqBKGxvY2FsZXVua25vd244MTArcnVieWdlbXNAcHJvdG9ubWFp
29
+ bC5jb20wMwYDVR0SBCwwKoEobG9jYWxldW5rbm93bjgxMCtydWJ5Z2Vtc0Bwcm90
30
+ b25tYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAQwV6pOp5gm8141pyXeQFI/5E
31
+ rZYO3MvdyZM8O3HMD51LDS8mtMURceaKZM6WTambe2RVX4A++0qUiEnn9K4Fexm/
32
+ SEGaC/Gp+Fg9D1SKfkdq9bgdIhOEUwiGqjczgzNC806AtWZ+awI940oydFYZlpo0
33
+ jMQihPPJEqF1U6JBDMZYV5tX/dJYSGRl9L3s1k2tjoN98q+beNaZQDn21Amml4eK
34
+ KEkMeTTJ2E4GVzR9eKEETLq2LygdUWWZ5NdWOYTxJMdg1GZp3b6X8hJrwfOiizqt
35
+ /ANlIEh11/pOnWa6WPUVpGIMpYdquvmJXnF2LX6zxkKK1hbrebt+vAEAGczgw1Ri
36
+ rkLM6y+BHQdkOTj3VG4MjIU8D4h1Z73Exzxds/VbVKMEz+8JrFjGJ/tYa0PZ8U5p
37
+ 3yXL4G6eW3rdBW/OiLF7GgG2o26d02OMzf4+ubUVS5LQDOcd4vgNPLWzJSBt1YIh
38
+ TgBsED7Me5YdMVXxtTWYsF1VMzaL9hReD3UXGcxe
33
39
  -----END CERTIFICATE-----
34
- date: 2018-05-19 00:00:00.000000000 Z
40
+ date: 2022-07-17 00:00:00.000000000 Z
35
41
  dependencies:
36
42
  - !ruby/object:Gem::Dependency
37
43
  name: rspec
@@ -39,14 +45,14 @@ dependencies:
39
45
  requirements:
40
46
  - - "~>"
41
47
  - !ruby/object:Gem::Version
42
- version: '3.7'
48
+ version: '3.11'
43
49
  type: :development
44
50
  prerelease: false
45
51
  version_requirements: !ruby/object:Gem::Requirement
46
52
  requirements:
47
53
  - - "~>"
48
54
  - !ruby/object:Gem::Version
49
- version: '3.7'
55
+ version: '3.11'
50
56
  - !ruby/object:Gem::Dependency
51
57
  name: rspeckled
52
58
  requirement: !ruby/object:Gem::Requirement
@@ -84,11 +90,18 @@ files:
84
90
  - lib/apiphobic/resource/processors/paging.rb
85
91
  - lib/apiphobic/resource/processors/sorting.rb
86
92
  - lib/apiphobic/resource/version.rb
87
- homepage: ''
93
+ homepage: https://github.com/thekompanee/apiphobic-resource
88
94
  licenses:
89
95
  - MIT
90
96
  metadata:
91
97
  allowed_push_host: https://rubygems.org
98
+ bug_tracker_uri: https://github.com/thekompanee/apiphobic-resource/issues
99
+ changelog_uri: https://github.com/thekompanee/apiphobic-resource/blob/master/CHANGELOG.md
100
+ documentation_uri: https://github.com/thekompanee/apiphobic-resource/tree/releases/v1.3.0
101
+ homepage_uri: https://github.com/thekompanee/apiphobic-resource
102
+ source_code_uri: https://github.com/thekompanee/apiphobic-resource
103
+ wiki_uri: https://github.com/thekompanee/apiphobic-resource/wiki
104
+ rubygems_mfa_required: 'true'
92
105
  post_install_message:
93
106
  rdoc_options: []
94
107
  require_paths:
@@ -104,8 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
117
  - !ruby/object:Gem::Version
105
118
  version: '0'
106
119
  requirements: []
107
- rubyforge_project:
108
- rubygems_version: 2.7.6
120
+ rubygems_version: 3.3.7
109
121
  signing_key:
110
122
  specification_version: 4
111
123
  summary: API Resources
metadata.gz.sig CHANGED
Binary file