Project

ne_api

0.01
Low commit activity in last 3 years
A long-lived project that still receives updates
Next Engine API for ruby
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 10.0
>= 0

Runtime

 Project Readme

Next Engine Ruby Gem

A Ruby wrapper for the Next Engine API http://api.next-e.jp

Installation

Add this line to your application's Gemfile:

gem 'ne_api'

And then execute:

$ bundle

Or install it yourself as:

$ gem install ne_api

How to Use

please read API Document.

Global Environment

CLIENT_ID ....... Get it from Next-Engine's 「アプリを作る」->「API」->「クライアントID」 page CLIENT_SECRET ... Get it from Next-Engine's 「アプリを作る」->「API」->「クライアントシークレット」 page

Sample Application

require 'ne_api'
require 'sinatra/base'
class MyApp < Sinatra::Base
  enable :sessions
    CLIENT_ID = "XXX"
    CLIENT_SECRET = "XXXX"
    CALLBACK_URI = "https://localhost:3000/callback"
	get "/" do
	  "<a href=" + NeAPI::NE_SERVER_HOST + NeAPI::Auth::SIGN_IN_PATH + "?client_id="+CLIENT_ID+"&redirect_uri="+ CALLBACK_URI + ">Connect with Next Engine</a>"
	end

  get "/callback" do
    auth = NeAPI::Auth.new redirect_url: CALLBACK_URI
    res = auth.ne_auth params[:uid], params[:state], CLIENT_ID, CLIENT_SECRET
    session[:access_token] =  res["access_token"]
    session[:refresh_token] =  res["refresh_token"]
    redirect "/home"
  end

  get "/home" do
    redirect "/" if session[:access_token].nil? || session[:refresh_token].nil?
    html =
	  """
<h2>sample for ne api call</h2>
<ol>
<li><a href='/login_user/info'>Login User Info</a></li>
<li><a href='/login_company/info'>Login Company Info</a></li>
<li><a href='/receiveorder/search'>Login Receive Order Search</a></li>
</ol>
"""
  end

  get "/receiveorder/search" do
    content_type :text
    result = (NeAPI::Master.new(access_token: session["access_token"], refresh_token: session["refresh_token"]).receiveorder_base_search)
	  result.inspect
  end

  get "/login_user/info" do
    content_type :text
    result = (NeAPI::Master.new(access_token: session["access_token"], refresh_token: session["refresh_token"]).login_user_info)
	  update_token result
	  result["data"].first.inspect
  end

  get "/login_company/info" do
    content_type :text
    result = (NeAPI::Master.new(access_token: session["access_token"], refresh_token: session["refresh_token"]).login_company_info)
	  update_token result
	  result["data"].first.inspect
  end

  def update_token res
    session[:access_token] =  res["access_token"]
    session[:refresh_token] =  res["refresh_token"]
  end

end


MyApp.run! host: 'localhost', port: 3000 do |server|

  ssl_options = {
      :verify_peer => false
  }
  server.ssl = true
  server.ssl_options = ssl_options
end

Testing Support (RSpec)

ne_api provides built-in stub classes for testing in Rails applications.

Setup

Add to your spec/rails_helper.rb:

require 'ne_api/testing'

RSpec.configure do |config|
  config.include NeAPI::Testing::RSpecHelpers
end

Basic Usage

Using with_fake_ne_api block

RSpec.describe OrderSyncService do
  it "syncs orders from Next Engine" do
    with_fake_ne_api do |fake|
      # Stub API responses
      fake.stub(:receiveorder_base_search, [
        ne_receive_order(receive_order_id: "ORDER001", receive_order_total_amount: 5000),
        ne_receive_order(receive_order_id: "ORDER002", receive_order_total_amount: 3000)
      ])

      service = OrderSyncService.new
      result = service.sync

      expect(result.count).to eq 2
      expect(fake.called?(:receiveorder_base_search)).to be true
      expect(fake.call_count(:receiveorder_base_search)).to eq 1
    end
  end
end

Direct injection (recommended for services with DI)

RSpec.describe StockService do
  let(:fake_master) { fake_ne_master }

  before do
    fake_master.stub(:master_stock_search, [
      ne_stock(stock_goods_id: "GOODS001", stock_quantity: 100)
    ])
  end

  it "fetches stock data" do
    service = StockService.new(ne_api: fake_master)
    stocks = service.fetch_all

    expect(stocks.first["stock_quantity"]).to eq 100
  end
end

Simulating Errors

it "handles API errors" do
  with_fake_ne_api do |fake|
    fake.simulate_error(code: "001001", message: "Authentication failed")

    expect { service.sync }.to raise_error(NeAPIException, /001001/)
  end
end

Authentication Testing

RSpec.describe AuthController do
  it "authenticates user" do
    with_fake_ne_auth do |fake_auth|
      fake_auth.stub_auth_response({
        "access_token" => "custom_access_token",
        "refresh_token" => "custom_refresh_token",
        "company_ne_id" => "NE999999"
      })

      post :callback, params: { uid: "test_uid", state: "test_state" }

      expect(session[:access_token]).to eq "custom_access_token"
    end
  end

  it "handles authentication failure" do
    with_fake_ne_auth do |fake_auth|
      fake_auth.stub_auth_failure

      expect {
        post :callback, params: { uid: "test_uid", state: "test_state" }
      }.to raise_error(NeAPIException)
    end
  end
end

Available Factory Methods

Method Description
ne_goods(**attrs) Generate goods master data
ne_goods_list(count) Generate list of goods
ne_stock(**attrs) Generate stock data
ne_stock_list(count) Generate list of stocks
ne_receive_order(**attrs) Generate receive order data
ne_receive_order_list(count) Generate list of orders
ne_receive_order_row(**attrs) Generate order row data
ne_shop(**attrs) Generate shop data
ne_warehouse_stock(**attrs) Generate warehouse stock data
ne_company_info(**attrs) Generate company info
ne_user_info(**attrs) Generate user info
ne_error(code:, message:) Generate error response

FakeMaster Methods

Method Description
stub(method_name, response) Stub a specific API method
simulate_error(code:, message:) Enable error mode
clear_error Disable error mode
reset! Clear all stubs and history
called?(method_name) Check if method was called
call_count(method_name) Get call count
last_call_args(method_name) Get last call arguments

Service Design for Testability

For best testability, design your services to accept ne_api as a dependency:

class OrderSyncService
  def initialize(ne_api: nil)
    @ne_api = ne_api || NeAPI::Master.new(
      access_token: Rails.application.credentials.ne_access_token,
      refresh_token: Rails.application.credentials.ne_refresh_token
    )
  end

  def sync
    @ne_api.receiveorder_base_search
  end
end

This allows easy injection of FakeMaster in tests.

Contributing

  1. Fork it ( https://github.com/[my-github-username]/ne_api/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Update

ver0.0.23

  • 同梱系APIに対応(受注伝票一括同梱 receiveorder_base_bundle / 同梱候補グループ取得 receiveorder_base_bundle_candidate_groups / 受注分類タグ検索 receiveorder_groupingtag_search)。詳細は BUNDLING_API.md 参照
  • method_missing を複数語メソッド対応に改修(登録モデル名の最長前方一致で解決。単一語メソッドは従来通りで後方互換)

ver0.0.22

  • bug fix

ver0.0.21

  • 倉庫別の在庫などに対応
  • rspecも作成

ver0.0.18

  • 受注税金内訳取得APIに対応

ver0.0.17

  • セット在庫系APIに対応

ver0.0.16

  • セット系APIに対応

ver0.0.15

  • 商品ページ系APIに対応

ver0.0.14

  • 受注伝票一括更新・納品書印刷済みの対応の修正

ver0.0.12

  • 受注伝票一括更新・納品書印刷済み一括更新に対応

ver0.0.11

  • NEのログイン認証方式に変更

ver0.0.9

  • リトライすべきエラーメッセージについてリトライするようにした

ver0.0.8

  • NextEngineのAPIにあわせて、最新の定義を追加

ver0.0.6

  • Ruby2.2対応
  • リトライ回数のデフォルト値変更