Class: LedgerSync::Ledgers::NetSuite::Client

Inherits:
Client
  • Object
show all
Defined in:
lib/ledger_sync/ledgers/netsuite/client.rb

Constant Summary collapse

HEADERS =
{
  # 'Accept' => 'application/schema+json'
}.freeze
WRITE_HEADERS =
{
  'Accept' => '*/*',
  'Content-Type' => 'application/json',
  'prefer' => 'transient'
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Client

base_module, #base_module, base_operation_module_for, config, #ledger_attributes_to_save, #ledger_configuration, ledger_resource_type_for, operation_class_for, #operation_for, #parse_operation_error, resource_from_ledger_type, resources, root_key, #searcher_class_for, #searcher_for, url_for

Methods included from Util::Mixins::ResourceRegisterableMixin

included

Methods included from Validatable

#valid?, #validate, #validate_or_fail

Constructor Details

#initialize(account_id:, consumer_key:, consumer_secret:, token_id:, token_secret:) ⇒ Client

Returns a new instance of Client.



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 25

def initialize(
  account_id:,
  consumer_key:,
  consumer_secret:,
  token_id:,
  token_secret:
)
  @account_id = 
  @consumer_key = consumer_key
  @consumer_secret = consumer_secret
  @token_id = token_id
  @token_secret = token_secret
end

Instance Attribute Details

#account_idObject (readonly)

Returns the value of attribute account_id.



19
20
21
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 19

def 
  @account_id
end

#consumer_keyObject (readonly)

Returns the value of attribute consumer_key.



19
20
21
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 19

def consumer_key
  @consumer_key
end

#consumer_secretObject (readonly)

Returns the value of attribute consumer_secret.



19
20
21
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 19

def consumer_secret
  @consumer_secret
end

#token_idObject (readonly)

Returns the value of attribute token_id.



19
20
21
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 19

def token_id
  @token_id
end

#token_secretObject (readonly)

Returns the value of attribute token_secret.



19
20
21
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 19

def token_secret
  @token_secret
end

Class Method Details

.ledger_attributes_to_saveObject



100
101
102
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 100

def self.ledger_attributes_to_save
  %i[]
end

.ledger_resource_type_overridesObject



123
124
125
126
127
128
129
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 123

def self.ledger_resource_type_overrides
  {
    CustomerDeposit => 'customerdeposit',
    LedgerClass => 'classification',
    JournalEntry => 'journalEntry'
  }
end

.new_from_env(**override) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 104

def self.new_from_env(**override)
  new(
    {
      account_id: ENV.fetch('NETSUITE_ACCOUNT_ID', nil),
      consumer_key: ENV.fetch('NETSUITE_CONSUMER_KEY', nil),
      consumer_secret: ENV.fetch('NETSUITE_CONSUMER_SECRET', nil),
      token_id: ENV.fetch('NETSUITE_TOKEN_ID', nil),
      token_secret: ENV.fetch('NETSUITE_TOKEN_SECRET', nil)
    }.merge(override)
  )
end

Instance Method Details

#account_id_for_oauthObject



39
40
41
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 39

def 
  .gsub(/\-/, '_').upcase
end

#account_id_for_urlObject



43
44
45
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 43

def 
  .gsub(/_/, '-').downcase
end

#api_base_urlObject



47
48
49
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 47

def api_base_url
  @api_base_url ||= "https://#{api_host}/services/rest/record/v1"
end

#api_hostObject



51
52
53
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 51

def api_host
  @api_host ||= "#{}.suitetalk.api.netsuite.com"
end

#delete(**keywords) ⇒ Object



55
56
57
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 55

def delete(**keywords)
  request(keywords.merge(method: :delete))
end

#get(**keywords) ⇒ Object



59
60
61
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 59

def get(**keywords)
  request(keywords.merge(method: :get))
end

#ledger_resource_path(args = {}) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 63

def ledger_resource_path(args = {})
  resource = args.fetch(:resource, nil)
  params   = args.fetch(:params, {})

  ret = self.class.ledger_resource_type_for(resource_class: resource.class) # This can be turned into a case statement if we need to override
  ret += "/#{resource.ledger_id}" if resource.ledger_id.present? && args.fetch(:id, true)
  Util::URLHelpers.merge_params_in_path(
    path: ret,
    params: params
  )
end

#metadata_for(record:) ⇒ Object



75
76
77
78
79
80
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 75

def (record:)
  Record::Metadata.new(
    client: self,
    record: record
  )
end

#patch(headers: {}, **keywords) ⇒ Object



82
83
84
85
86
87
88
89
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 82

def patch(headers: {}, **keywords)
  request(
    keywords.merge(
      headers: WRITE_HEADERS.merge(headers),
      method: :patch
    )
  )
end

#post(headers: {}, **keywords) ⇒ Object



91
92
93
94
95
96
97
98
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 91

def post(headers: {}, **keywords)
  request(
    keywords.merge(
      headers: WRITE_HEADERS.merge(headers),
      method: :post
    )
  )
end

#url_for(resource:) ⇒ Object



116
117
118
119
120
121
# File 'lib/ledger_sync/ledgers/netsuite/client.rb', line 116

def url_for(resource:)
  DashboardURLHelper.new(
    resource: resource,
    base_url: "https://#{}.app.netsuite.com"
  ).url
end