rock_rms 8.5.0 → 8.7.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: 19e99238273531c1c5f3be2e95cb7d10d3b5c025043a11157e10ae7f01b984a5
4
- data.tar.gz: 4d5e4758dac63b7174305d2ed3d576b60e298c30d4f5b07f7a90b5bb2d76841a
3
+ metadata.gz: e043a1d0535862e33752e94420a46d88c9f4fea44a35dfe89e2107f6d5123f98
4
+ data.tar.gz: d444592864acd5d433e0d0dae2524148626e794f49981a92ca8f6bab50a5a8cd
5
5
  SHA512:
6
- metadata.gz: 60ae0f673bad03a9a86eab352448a176b7ad8b48fd63c7d48a4571f7fdd14fda6b402ca06e0de9bd8c97960877b9bafab570f2bcd02b081e6205c81ec84d0b15
7
- data.tar.gz: 3cec7a048167ec96a7fa20033a28c768056eca3ec940ec8ef5e491fd1852cba804abbf93004a39bef26ad418e7f18d7321c7befe72bbfe6028b8c16a699dae16
6
+ metadata.gz: f182e50f62ba496c0b164201731a62261262be9e8b12b54fba9c94c015b83beb704183761524cb1230f6ca9835c985509c3884737dbfef11f61e66e53fb10097
7
+ data.tar.gz: c239b799deec1dacfd080f93191dfe4afaa7de7a4791a7421c835a314dfe91c89d5b0be54bcd4472f9a92b3301a379d736ce833d89abad2f31affa41f17cbc66
data/README.md CHANGED
@@ -22,12 +22,19 @@ Add this line to your application's Gemfile:
22
22
 
23
23
  ### Usage
24
24
  ````ruby
25
+ # Authenticating with username and password
25
26
  client = RockRMS::Client.new(
26
27
  url: ...,
27
28
  username: ...,
28
29
  password: ...,
29
30
  )
30
31
 
32
+ # Authenticating with authorization token
33
+ client = RockRMS::Client.new(
34
+ url: ...,
35
+ authorization_token: ...,
36
+ )
37
+
31
38
  # Find a specific person
32
39
  client.find_person_by_email('gob@bluthco.com')
33
40
  client.find_person_by_name('Tobias Funke')
@@ -1,14 +1,15 @@
1
1
  require 'faraday'
2
- require 'faraday_middleware'
3
2
  require 'faraday/multipart'
4
3
 
5
4
  Dir[File.expand_path('../resources/*.rb', __FILE__)].each { |f| require f }
6
5
  require File.expand_path('../response/base.rb', __FILE__)
6
+ require File.expand_path('../transform_hash_keys.rb', __FILE__)
7
7
  require File.expand_path('../recurring_frequencies.rb', __FILE__)
8
8
  Dir[File.expand_path('../response/*.rb', __FILE__)].each { |f| require f }
9
9
 
10
10
  module RockRMS
11
11
  class Client
12
+ include TransformHashKeys
12
13
  include RecurringFrequencies
13
14
  include RockRMS::Client::Attribute
14
15
  include RockRMS::Client::AttributeValue
@@ -46,16 +47,21 @@ module RockRMS
46
47
  include RockRMS::Client::WorkflowActivityType
47
48
  include RockRMS::Client::WorkflowType
48
49
 
49
- attr_reader :url, :username, :password, :logger, :cookie, :connection, :adapter, :ssl
50
+ attr_reader :url, :username, :password, :logger, :cookie, :connection, :adapter, :ssl, :authorization_token
51
+
52
+ def initialize(url:, username: nil, password: nil, authorization_token: nil, logger: true, adapter: Faraday.default_adapter, ssl: nil)
53
+ if username.nil? && password.nil? && authorization_token.nil?
54
+ raise ArgumentError, 'either username and password or authorization_token is required'
55
+ end
50
56
 
51
- def initialize(url:, username:, password:, logger: true, adapter: Faraday.default_adapter, ssl: nil)
52
57
  @url = "#{url}/api/"
53
- @username = username
54
- @password = password
58
+ @username = username unless authorization_token
59
+ @password = password unless authorization_token
60
+ @authorization_token = authorization_token unless username && password
55
61
  @logger = logger
56
62
  @adapter = adapter
57
63
  @ssl = ssl
58
- @cookie = auth['set-cookie']
64
+ @cookie = auth['set-cookie'] unless auth.nil?
59
65
  end
60
66
 
61
67
  def delete(path, options = {})
@@ -81,6 +87,8 @@ module RockRMS
81
87
  private
82
88
 
83
89
  def auth
90
+ return nil if username.nil? && password.nil?
91
+
84
92
  begin
85
93
  auth_request('Auth/Login')
86
94
  rescue Faraday::ParsingError => e
@@ -108,6 +116,7 @@ module RockRMS
108
116
  }
109
117
 
110
118
  headers['Cookie'] = cookie if cookie
119
+ headers['Authorization-Token'] = authorization_token if authorization_token
111
120
 
112
121
  client_opts = {
113
122
  url: url,
@@ -13,7 +13,7 @@ end
13
13
 
14
14
  require 'faraday'
15
15
  module FaradayMiddleware
16
- class RockRMSErrorHandler < Faraday::Response::Middleware
16
+ class RockRMSErrorHandler < Faraday::Middleware
17
17
  ERROR_STATUSES = 400..600
18
18
 
19
19
  def on_complete(env)
@@ -1,11 +1,19 @@
1
- require 'faraday_middleware/response_middleware'
1
+ require 'oj'
2
2
 
3
3
  module FaradayMiddleware
4
- class ParseOj < ResponseMiddleware
5
- dependency 'oj'
4
+ class ParseOj < Faraday::Middleware
5
+ def on_complete(env)
6
+ if empty_body?(env[:body].strip)
7
+ env[:body] = nil
8
+ else
9
+ env[:body] = Oj.load(env[:body], mode: :compat)
10
+ end
11
+ end
12
+
13
+ private
6
14
 
7
- define_parser do |body|
8
- Oj.load(body, mode: :compat) unless body.strip.empty?
15
+ def empty_body?(body)
16
+ body.empty? && body == ''
9
17
  end
10
18
  end
11
19
  end
@@ -25,6 +25,23 @@ module RockRMS
25
25
  )
26
26
  end
27
27
 
28
+ #
29
+ # address_format
30
+ # {
31
+ # street1:,
32
+ # street2:,
33
+ # city:,
34
+ # state:,
35
+ # postal_code:,
36
+ # country:,
37
+ # }
38
+ #
39
+ def save_group_address(group_id:, location_type_id:, address:)
40
+ url_params = TransformHashKeys.camelize_keys(address)
41
+
42
+ put("Groups/SaveAddress/#{group_id}/#{location_type_id}?#{URI.encode_www_form(url_params)}")
43
+ end
44
+
28
45
  private
29
46
 
30
47
  def group_path(id = nil)
@@ -58,7 +58,8 @@ module RockRMS
58
58
  transaction_code: nil,
59
59
  transaction_type_value_id: nil,
60
60
  authorized_person_id: nil,
61
- date: nil
61
+ date: nil,
62
+ foreign_currency_code_value_id: nil
62
63
  )
63
64
  options = {}
64
65
 
@@ -71,6 +72,7 @@ module RockRMS
71
72
  options['TransactionCode'] = transaction_code if transaction_code
72
73
  options['AuthorizedPersonAliasId'] = authorized_person_id if authorized_person_id
73
74
  options['TransactionDateTime'] = date if date
75
+ options['ForeignCurrencyCodeValueId'] = foreign_currency_code_value_id if foreign_currency_code_value_id
74
76
 
75
77
  patch(transaction_path(id), options)
76
78
  end
@@ -11,7 +11,8 @@ module RockRMS
11
11
  giving_group_id: 'GivingGroupId',
12
12
  alias_id: 'PrimaryAliasId',
13
13
  connection_status_value_id: 'ConnectionStatusValueId',
14
- record_type_value_id: 'RecordTypeValueId'
14
+ record_type_value_id: 'RecordTypeValueId',
15
+ primary_family_id: 'PrimaryFamilyId',
15
16
  }.freeze
16
17
 
17
18
  def format_single(data)
@@ -0,0 +1,11 @@
1
+ module TransformHashKeys
2
+ def self.camelize_keys(hash)
3
+ hash
4
+ .filter { |_, v| v }
5
+ .transform_keys { |k| camelize(k) }
6
+ end
7
+
8
+ def self.camelize(term)
9
+ term.to_s.gsub(/(?:^|_+)([^_])/) { $1.upcase }.tap { |s| s[0] = s[0].downcase }
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module RockRMS
2
- VERSION = '8.5.0'.freeze
2
+ VERSION = '8.7.0'.freeze
3
3
  end
data/rock_rms.gemspec CHANGED
@@ -20,8 +20,7 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.require_paths = ['lib']
22
22
 
23
- s.add_runtime_dependency 'faraday'
24
- s.add_runtime_dependency 'faraday_middleware'
23
+ s.add_runtime_dependency 'faraday', '> 2.0'
25
24
  s.add_runtime_dependency 'faraday-multipart'
26
25
  s.add_runtime_dependency 'json'
27
26
  s.add_runtime_dependency 'oj'
@@ -9,6 +9,14 @@ RSpec.describe RockRMS::Client do
9
9
  }
10
10
  end
11
11
  let(:attrs_without_logging) { attrs.merge(logger: false) }
12
+ let(:attrs_without_authentication) do
13
+ {
14
+ url: 'http://some-rock-uri.com',
15
+ username: nil,
16
+ password: nil,
17
+ authorization_token: nil
18
+ }
19
+ end
12
20
 
13
21
  subject(:client) { described_class.new(**attrs_without_logging) }
14
22
  let(:noisy_client) { described_class.new(**attrs) }
@@ -19,14 +27,9 @@ RSpec.describe RockRMS::Client do
19
27
  .to raise_error(ArgumentError, /url/)
20
28
  end
21
29
 
22
- it 'requries `username` param' do
23
- expect { described_class.new }
24
- .to raise_error(ArgumentError, /username/)
25
- end
26
-
27
- it 'requries `password` param' do
28
- expect { described_class.new }
29
- .to raise_error(ArgumentError, /password/)
30
+ it 'requries either `username` and `password` params or `authorization_token` param' do
31
+ expect { described_class.new(attrs_without_authentication) }
32
+ .to raise_error(ArgumentError, /username and password or authorization_token/)
30
33
  end
31
34
 
32
35
  context 'url' do
@@ -107,4 +107,35 @@ RSpec.describe RockRMS::Client::Group, type: :model do
107
107
  client.list_families_for_person(123)
108
108
  end
109
109
  end
110
+
111
+
112
+ describe '#save_address' do
113
+ context 'arguments' do
114
+ it 'require `group_id`' do
115
+ expect { client.save_group_address }
116
+ .to raise_error(ArgumentError, /group_id/)
117
+ end
118
+
119
+ it 'require `location_type_id`' do
120
+ expect { client.save_group_address }
121
+ .to raise_error(ArgumentError, /location_type_id/)
122
+ end
123
+
124
+ it 'require `address`' do
125
+ expect { client.save_group_address }
126
+ .to raise_error(ArgumentError, /address/)
127
+ end
128
+
129
+ end
130
+
131
+ subject(:resource) do
132
+ client.save_group_address(group_id: 1, location_type_id: 1, address: { street1: '123 Main St', postal_code: '12345' })
133
+ end
134
+
135
+ it 'passes options' do
136
+ expect(client).to receive(:put)
137
+ .with("Groups/SaveAddress/1/1?street1=123+Main+St&postalCode=12345").and_call_original
138
+ resource
139
+ end
140
+ end
110
141
  end
File without changes
@@ -76,6 +76,15 @@ class RockMock < Sinatra::Base
76
76
  end
77
77
  end
78
78
 
79
+ # PUT requests
80
+ {
81
+ group_save_address: 'Groups/SaveAddress/:group_id/:location_type_id',
82
+ }.each do |json, end_point|
83
+ put "/api/#{end_point}" do
84
+ json_response 204, "#{json}.json"
85
+ end
86
+ end
87
+
79
88
  # PATCH requests
80
89
  [
81
90
  'FinancialBatches/:id',
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rock_rms
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.5.0
4
+ version: 8.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor Brooks
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-12 00:00:00.000000000 Z
11
+ date: 2023-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
17
+ - - ">"
25
18
  - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: faraday_middleware
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
19
+ version: '2.0'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - ">="
24
+ - - ">"
39
25
  - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '2.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: faraday-multipart
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -270,6 +256,7 @@ files:
270
256
  - lib/rock_rms/response/workflow_action_type.rb
271
257
  - lib/rock_rms/response/workflow_activity_type.rb
272
258
  - lib/rock_rms/response/workflow_type.rb
259
+ - lib/rock_rms/transform_hash_keys.rb
273
260
  - lib/rock_rms/version.rb
274
261
  - rock_rms.gemspec
275
262
  - spec/rock_rms/client_spec.rb
@@ -340,6 +327,7 @@ files:
340
327
  - spec/support/fixtures/group.json
341
328
  - spec/support/fixtures/group_locations.json
342
329
  - spec/support/fixtures/group_members.json
330
+ - spec/support/fixtures/group_save_address.json
343
331
  - spec/support/fixtures/groups.json
344
332
  - spec/support/fixtures/groups_with_campus.json
345
333
  - spec/support/fixtures/groups_with_locations.json