apiphobic-resource 1.0.1 → 1.2.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: 5e4530e0108f06f8ad02da81ba4775f20e71ac0aa1e4ccfd81d090c1656aeeb9
4
- data.tar.gz: ba4df9a641098d37b72674d5685e52175570d700b23f66b8aa3791eca8393135
3
+ metadata.gz: 5929b13d77c0b3e85f80ac7fcfc71f66cf34249f99970c73436ea1f8496b68d7
4
+ data.tar.gz: bd5411d364a65e31f8751c403b170363ddfea2c273b9c5aeb89b457272f836ca
5
5
  SHA512:
6
- metadata.gz: eb6f201cb95cec6aa4840e8f10c08adaeadc51492a5631a29572d4b24791c9c95932a4dcfcb733d0a745acadcb989f65ee738600b3cde712183fa4795efa5d28
7
- data.tar.gz: 5e6cbf1314ed020fef1a8d268fdbcfcdcc2f34071b97337286524f590a94ca197aa7d06a6e6200e2ffc43837aded2c264c9ea488c2b5f970b9079192bf50fec3
6
+ metadata.gz: 77d8cecf97580ef1e8d204540556bb462f66394d8b8547e6d290c21237a980bc66608ed3147a5dbf526ef1d639489ccbce82db76804fdcb26c1efe8c40371a69
7
+ data.tar.gz: ee80b6b44b634d63cd18b0ea59c01a18c78968c99d66f7295ab5842d25b64d80de71d04b374a34f1f2a8f0d347592ab0170e70caba119a00a65809ed256d2bf7
checksums.yaml.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- czm;ڒ�GpR���[�%���Lj�3׫�"@���`*�^�x�<$��c���'-6���L�ANUQt�Tm���x��e>3�,��%M^P
2
- Kd ���&a[�NkO�H'�p���Jns�iq��� ���ƶ�s��/lU�R|�N�#K�B����E ��I��+�Ϋ��a�ө=�{��׏�t䡯l��]E�?'B��
1
+ /r0��'�w�� c�wL�8BM+�������j32���b��s���B�Ҳ0V�?,�Z3��y&u�링���p��3�<^¦[=�)&IL���[yz�0��n0���+�?��K�y��I�ס��fx0X�L�@p���dG�(��qo�6 �'v.m�C�G�z���g2֒�L���1&����_"Q���e ����6��0j6���Ki��*�RN� �>�X�']��aZ7b�!٠n9?�ޏ�\���y��
2
+ ����s+ ac(�:��Tn���-96��q)_4� ���C�ɽB���l$�gqmA!w�T��fW����E�8!A��N��W�b$��O�
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
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'forwardable'
4
+
3
5
  require 'apiphobic/resource/processors/filtering'
4
6
  require 'apiphobic/resource/processors/including'
5
7
  require 'apiphobic/resource/processors/indexing'
@@ -9,22 +11,42 @@ require 'apiphobic/resource/processors/sorting'
9
11
  module Apiphobic
10
12
  module Resource
11
13
  class Model
14
+ extend Forwardable
15
+
12
16
  DEFAULT_PROCESSORS = %w{including}.freeze
13
17
 
14
- attr_accessor :resource,
18
+ attr_accessor :id,
19
+ :resource,
15
20
  :parameters
16
21
  attr_reader :processors
17
22
 
18
- def initialize(resource:, parameters:, **options)
23
+ def_delegators :processed,
24
+ :assign_attributes,
25
+ :delete,
26
+ :save!,
27
+ :save,
28
+ :subscribe
29
+
30
+ def initialize(resource:, id:, parameters:, **options)
31
+ self.id = id
19
32
  self.resource = resource
20
33
  self.parameters = parameters.dup
21
34
  self.processors = options.fetch(:processors, self.class::DEFAULT_PROCESSORS)
22
35
  end
23
36
 
24
37
  def processed
25
- @processed ||= processors.inject(resource) do |processed_resource, processor|
26
- processor.processed(processed_resource, parameters)
27
- end
38
+ @processed \
39
+ ||= begin
40
+ processed = processors.inject(resource) do |processed_resource, processor|
41
+ processor.processed(processed_resource, parameters)
42
+ end
43
+
44
+ if instance_of?(::Apiphobic::Resource::Collection)
45
+ processed
46
+ else
47
+ processed.find_by(id: id) || processed.new
48
+ end
49
+ end
28
50
  end
29
51
 
30
52
  def meta
@@ -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.0.1'
5
+ VERSION = '1.2.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.0.1
4
+ version: 1.2.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-04 00:00:00.000000000 Z
40
+ date: 2022-07-09 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.2.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