Netsuite
- This gem will act as a wrapper around the NetSuite SuiteTalk WebServices API. Wow, that is a mouthful.
- The gem does not cover the entire API, only the subset that we have found useful to cover so far.
- Extending the wrapper is pretty simple. See below for an example.
Installation
Add this line to your application's Gemfile:
gem 'netsuite'
And then execute:
$ bundle
Or install it yourself as:
$ gem install netsuite
Usage
Customer
- Initializing a customer can be done using a hash of attributes.
Get
Retrieves the customer by internalId.
customer = NetSuite::Records::Customer.get(4) # => #<NetSuite::Records::Customer:0x1042f59b8> customer.is_person # => true
Additions
- Please submit a pull request for any models or actions that you would like to be included. The API is quite large and so we will necessarily not cover all of it.
- Records should go into the
lib/netsuite/records/
directory. - Actions should be placed in their respective subdirectory under
lib/netsuite/actions
. Example:
# lib/netsuite/actions/customer/add.rb module NetSuite module Actions module Customer class Add def initialize(attributes = {}) @attributes = attributes end def self.call(attributes) new(attributes).call end def call response = NetSuite::Configuration.connection.request :add do soap.header = NetSuite::Configuration.auth_header soap.body = { :entityId => @attributes[:entity_id], :companyName => @attributes[:company_name], :unsubscribe => @attributes[:unsubscribe] } end success = response.to_hash[:add_response][:write_response][:status][:@is_success] == 'true' body = response.to_hash[:add_response][:write_response][:base_ref] NetSuite::Response.new(:success => success, :body => body) end end end end end response = NetSuite::Actions::Customer::Add.call( :entity_id => 'Shutter Fly', :company_name => 'Shutter Fly, Inc.', :unsubscribe => false ) # => #<NetSuite::Response:0x1041f64b5> response.success? # => true response.body # => { :internal_id => '979', :type => 'customer' }
Gotchas
- The Initialize Action duck-punches the .initialize method on any class that includes it. This has not proven to be a issue yet, but should be taken into account when analyzing any strange issues with the gem.
- Some records define a 'class' field. Defining a 'class' field on a record overrides the #class and #class= methods for this class. This is very obviously a problem. You can, instead, define a 'klass' field that will be turned into 'class' before being submitted to the API. The Invoice record has an example of this.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request