Skip to content

Commit

Permalink
Modify api
Browse files Browse the repository at this point in the history
  • Loading branch information
rajendrant committed Dec 19, 2018
1 parent ae13519 commit 0952d3d
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 29 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
build/
node_modules/
prebuilds/
36 changes: 31 additions & 5 deletions fuzzaldrin.coffee
Original file line number Diff line number Diff line change
@@ -1,16 +1,42 @@
fuzzaldrinplusfast = require('node-gyp-build')(__dirname);
binding = require('node-gyp-build')(__dirname);

defaultPathSeparator = if process?.platform is "win32" then '\\' else '/'

parseOptions = (options) ->
options.allowErrors ?= false
options.usePathScoring ?= true
options.useExtensionBonus ?= false
options.pathSeparator ?= defaultPathSeparator
options.optCharRegEx ?= null
options.wrap ?= null
options.maxResults ?= 0
return options

class FuzzaldrinPlusFast
constructor: ->
@obj = new binding.Fuzzaldrin()

setCandidates: (candidates, options = {}) ->
if options.key?
candidates = candidates.map(item => item[options.key])
@obj.setCandidates(candidates)

filter: (query, options = {}) ->
options = parseOptions(options)
@obj.filter query, options.maxResults,
options.usePathScoring, options.useExtensionBonus

module.exports =

New: ->
new fuzzaldrinplusfast.Fuzzaldrin()
new FuzzaldrinPlusFast()

filter: (candidates, query, options = {}) ->
obj = new fuzzaldrinplusfast.Fuzzaldrin()
obj.setCandidates(candidates)
obj = new FuzzaldrinPlusFast()
obj.setCandidates(candidates, options)
obj.filter(query, options)

score: (candidate, query, options = {}) ->
fuzzaldrinplusfast.score candidate, query, options
binding.score candidate, query, options

prepareQuery: ->
Binary file removed prebuilds/linux-x64/electron-napi.node
Binary file not shown.
Binary file removed prebuilds/linux-x64/node-napi.node
Binary file not shown.
35 changes: 11 additions & 24 deletions src/fuzzaldrin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,18 @@

#include "fuzzaldrin.h"

namespace {

Options parseOptions(const Element &query, const Napi::Value option_obj) {
size_t maxResults = 0;
bool usePathScoring = true;
bool useExtensionBonus = false;
if (option_obj.IsObject()) {
const Napi::Object options = option_obj.As<Napi::Object>();
if (options.Has("usePathScoring"))
usePathScoring = options["usePathScoring"].ToBoolean();
if (options.Has("useExtensionBonus"))
useExtensionBonus = options["useExtensionBonus"].ToBoolean();
if (options.Has("maxResults"))
maxResults = options["maxResults"].ToNumber().Uint32Value();
}
return Options(query, maxResults, usePathScoring, useExtensionBonus);
}

}

Napi::Value Fuzzaldrin::Filter(const Napi::CallbackInfo& info) {
Napi::Array res = Napi::Array::New(info.Env());
if (info.Length() < 1 || !info[0].IsString()) {
if (info.Length() != 4 || !info[0].IsString() || !info[1].IsNumber() ||
!info[2].IsBoolean() || !info[3].IsBoolean()) {
Napi::TypeError::New(info.Env(), "Invalid arguments").ThrowAsJavaScriptException();
return res;
}
Element query = info[0].As<Napi::String>();
Options options = parseOptions(query, info.Length() >= 2 ? info[1] : Napi::Value());
size_t maxResults = info[1].As<Napi::Number>().Uint32Value();
bool usePathScoring = info[2].As<Napi::Boolean>();
bool useExtensionBonus = info[3].As<Napi::Boolean>();
Options options(query, maxResults, usePathScoring, useExtensionBonus);
const auto matches = filter(candidates_, query, options);

for(uint32_t i=0; i<matches.size(); i++) {
Expand All @@ -54,12 +38,15 @@ Napi::Value Fuzzaldrin::SetCandidates(const Napi::CallbackInfo& info) {
}

Napi::Number score(const Napi::CallbackInfo& info) {
if (info.Length() < 2 || !info[0].IsString() || !info[1].IsString()) {
if (info.Length() != 4 || !info[0].IsString() || !info[1].IsString() ||
!info[2].IsBoolean() || !info[3].IsBoolean()) {
Napi::TypeError::New(info.Env(), "Invalid arguments").ThrowAsJavaScriptException();
}
std::string candidate = info[0].As<Napi::String>();
std::string query = info[1].As<Napi::String>();
Options options = parseOptions(query, info.Length() >= 3 ? info[2] : Napi::Value());
bool usePathScoring = info[2].As<Napi::Boolean>();
bool useExtensionBonus = info[3].As<Napi::Boolean>();
Options options(query, 1, usePathScoring, useExtensionBonus);
auto scoreProvider = options.usePathScoring ? path_scorer_score : scorer_score;
auto score = scoreProvider(candidate, query, options);
return Napi::Number::New(info.Env(), score);
Expand Down

0 comments on commit 0952d3d

Please sign in to comment.