apiphobic-resource 1.1.0 → 1.3.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: 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