- 投稿日:2020-07-09T22:39:52+09:00
Macにnode.js,npmのインストール
node.js,npmのインストールの流れ
① Homebrewのインストール
② nodebrewのインストール
③ node.jsのインストール
上記の手順で行います。
node.jsがインストールされれば、同時にnpmもインストールされます。Homebrewのインストール
terminalコマンド$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"nodebrewのインストール
terminalコマンド$ brew install nodebrewnodebrewのバージョンの確認
バージョンを確認することで、インストールがうまく行っているのかを確認できる。
terminalコマンド$ nodebrew -vnode.jsのインストール
terminalコマンド$ nodebrew install-binary latestインストールされたnode.jsのバージョンを確認する。
terminalコマンド$ nodebrew list上記を入力すると、下記のようなログが出力される。
出力ログv12.14.1 current: v12.14.1currentの部分が、現在動いているnode.jsです。
次のように出力された場合には、node.jsが有効になっていません。出力ログcurrent: none有効化するためには、インストール済みのバージョンをuseコマンドで有効化します。
terminalコマンド$ nodebrew use v12.14.1node.jsがインストールされれば、npmも同時にインストールされます。
- 投稿日:2020-07-09T22:33:15+09:00
Macにnodebrewでnodeをインストールするまでにしたこと
Macにnodebrewでnodeをインストールしようとおもったところ、nodebrewでインストールしたnodeのバージョンと
node -v
のバージョンが合っていなかったので、解決した方法を備忘録として残します。npm、node、nodebrewをアンインストールする
まずはnpm、node、nodebrewをインストールしているかを確認します。
ターミナル$ npm -v $ node -v $ nodebrew -vコマンドでバージョンが確認できない場合はインストールの段階に進みましょう。
バージョンが確認できた場合はアンインストールします。
npmをアンインストールする
まずnpmをアンインストールします。
次のコマンドを順番に実行してください。
ターミナル$ npm uninstall -f npm $ rm -rf .npm \ > node_modules
npm -v
で確認してバージョンが表示されなければ成功です。nodeをアンインストールする
nodeをアンインストールします。
nodeをインストールした方法でアンインストールの方法が違います。よくわからない場合は全て実行してください。
パッケージ版
homebrewでインストールした場合のアンインストール方法
ターミナル$ brew uninstall nodeその他でインストールした場合のアンインストール方法
次のコマンドを順番に実行してください。
ターミナル$ lsbom -f -l -s -pf /var/db/receipts/org.nodejs.node.pkg.bom \ > | while read i; do > sudo rm /usr/local/${i} > done $ sudo rm -rf /usr/local/lib/node \ > /usr/local/lib/node_modules \ > /var/db/receipts/org.nodejs.*ソース版
which node
で確認したコードをrm -rf
で削除してください。
必ずしも/usr/local/bin/node
とは限りません。ターミナル$ which node /usr/local/bin/node $ rm -rf /usr/local/bin/node \ > node_modulesアンインストール後
アンインストール後に
node -v
で確認して、バージョンが表示されなければ成功です。nodebrewをアンインストールする
nodebrewをアンインストールする方法は二つあります。
最初の方法でアンインストールできると思いますが、できなかった場合は次の方法も実行してみてください。以下がnodebrewをアンインストールするコマンドです。
ターミナル$ brew uninstall nodebrewこのコマンドを実行した後
nodebrew -v
でバージョン確認をしましょう。
バージョンが表示されなければ成功です。この方法でアンインストールができなかった場合は次の方法を試してみてください。
ターミナル$ brew search nodebrewこのコマンドで
nodebrew
というディレクトリがあるかを確認します。
あった場合は次を実行してnodebrew
のある場所を確認します。ターミナル$ brew info nodebrew場所が確認できた場合は
Finder
からそこの場所に移動して、nodebrew
を直接ゴミ箱に捨ててください。これでnpm、node、nodebrewのアンインストールが終了しました。
nodeのインストール
アンインストールが終了したら、nodeをインストールしていきます。
nodebrewのインストール、環境変数の設定
次のコマンドを順番に実行してください。
ターミナル$ curl -L git.io/nodebrew | perl - setup $ export PATH=$HOME/.nodebrew/current/bin:$PATHnodeのインストール
次にnodeのインストールをします。
インストールするバージョンは最新版にします。ターミナル$ nodebrew install-binary latestインストールしたバージョンの確認
インストールしたバージョンを確認します。
ターミナル$ nodebrew ls v14.5.0 current: node
current: node
とありますが、ここには現在使用しているバージョンが表示されます。
この状態だとまだ使用することができないのでバージョンを設定します。バージョンの設定
使用するバージョンを設定します。
今回はv14.5.0
というバージョンを設定します。ターミナル$ nodebrew use v14.5.0これでバージョンが設定できました。
ターミナル$ nodebrew ls v14.5.0 current: v14.5.0確認すると設定できています。
動作確認
最後にnodeが動作しているか確認しましょう。
ターミナル$ node -v v14.5.0設定したバージョンが表示されれば成功です。
参考サイト
外部サイト
Qiita
- 投稿日:2020-07-09T09:11:44+09:00
GASでなんちゃってORマッパー
はじめに
GASでデータを取るのがめんどくさかったのでORマッパー的なものが欲しくなったので作りました。
主な機能
- テーブル操作
- find,
- select
- discard
- insert
- inner
- join
- outer join
- cross join
- not
- update
- transaction (begin, save, commit, rollback)
- record iterator
- order by
- sort
- sub query
- create
- レコード操作
- get
- set (update)
- validation
- namespace
- create
使い方
プロジェクト新規作成
$ npm run setup:create ※途中でGoogleアカウントログインを要求されます。既存プロジェクトにアップする場合
$ npm run setup:cloneDocker起動・終了
$ npm run docker:up $ npm run docker:downログイン
$ npm run loginソース監視・自動ビルド
$ npm run watchプッシュ
$ npm run pushサンプル用テーブル(シート)作成
global.growSeeeds = function () { growSeeds() }※スクリプトエディタ上でグローバル関数
growSeeeds()
を実行してください。シートとデータが作成されます。Examples
- サンプル用テーブル作成
- テーブル操作
- レコード操作
- Api
一部サンプル
GET
declare var global: any; const users = McTable.use( { name: 'users' } ) // テーブル(シート)名渡す // spreadsheetを指定すると他のスプレットシートのデータを読み込ませられる // const users = McTable.use( { name: 'users', spreadsheet: SpreadsheetApp.getActiveSpreadsheet() } ) const authorities = McTable.use( { name: 'authorities' } ) const countries = McTable.use( { name: 'countries' } ) global.doGet = function ( e ) { const id = +e.parameter.id const resultTable = users // usersとauthoritiesをusersのauth_idとauthoritiesのidをキーに外部結合 .leftOuterJoin( 'auth_id', authorities, 'id' ) // 内部結合したテーブルとcountriesをusers.country_idとcountriesのidをもとに外部結合 .leftOuterJoin( 'users.country_id', countries, 'id' ) // 結合されたテーブルからusersのidをキーにレコード検索 .find( { 'users.id': id } ) // 抽出カラム選択 .select( [ 'users.id', 'users.name', 'countries.id', 'countries.name_ja', 'authorities.auth' ] ) resultTable.each(record => { const countryId = record.get( 'countries.id' ) if ( countryId === 'USA' ) { // 国籍変更 record .set( 'countries.id', 'JPN' ) .set( 'countries.name_ja', 'ジパング' ) } const auth = record // いちいちauthorities.authと入力するのが面倒なのでネームスペースを設定 .setNamespace( 'authorities' ) // authorities.authのデータを取得 .get( 'auth' ) // authorities.authが'admin'の場合にレコードを上書き if ( auth === 'admin' ) { record.set( 'auth', '管理者' ) } const mail = record // ネームスペースをリセット .resetNamespace() .get( 'users.mail' ) // メールダドレスの登録がなければ変わりのアドレスを設定 if ( mail === '' ) { record.set( 'users.mail', 'sample@_gmail.com' ) } }) const result = JSON.stringify({ data: resultTable.hashes() }) return ContentService.createTextOutput( result ); } // <エントリーポイントURL>?id=1 // こんな感じで帰ってくる { "data":[ { "users.id":1, "users.name":"John", "countries.id":"JPN", "countries.name_ja":"ジパング", "authorities.auth":"管理者" } ] }レコード検索
// テーブル取得 const users = McTable.use( { name: 'users' } ) // --------------------------------------------------------------------------------------------------------------------- // SELECT * FROM users WHERE id=1 // --------------------------------------------------------------------------------------------------------------------- users.find( { id: 1 } ) // foundUsers.data //=> [ [ 1, 'John', 'john@_gmail.com', 1, 'USA' ] ] // foundUsers.cols //=> [ 'id', 'name', 'mail', 'auth_id', 'country_id' ] // foundUsers.colsLength //=> 1 // foundUsers.existsSheet //=> true // foundUsers.existsCols //=> true // foundUsers.existsRecords //=> true // foundUsers.records //=> [ { McRecord } ] // foundUsers.recordsLength //=> 1 // foundUsers.firstRecord //=> { McRecord } // foundUsers.lastRecord //=> { McRecord } // foundUsers.mcSS //=> { McSS } // foundUsers.mcSheet //=> { McSheet } // foundUsers.savepoints //=> { McSheet } // foundUsers.latest //=> { McSheet } // --------------------------------------------------------------------------------------------------------------------- // SELECT id, name FROM users WHERE id IN(1, 2) AND name="John" // --------------------------------------------------------------------------------------------------------------------- result = users .find( { id: [ 1, 2 ], name: 'John' } ) .select( [ 'id', 'name' ] ) Logger.log( result.hashes() ) // [ // { // name=John, // id=1.0 // } // ] // --------------------------------------------------------------------------------------------------------------------- // SELECT auth_id FROM (SELECT * FROM users WEHERE id NOT 1) WHERE id IN(1, 2, 3) // --------------------------------------------------------------------------------------------------------------------- result = users.find( { id: [ 1, 2, 3, 4 ] } ).not( { id: 1 } ).select( [ 'auth_id' ] ) Logger.log( result.hashes() ) // [ // { // auth_id=1.0 // }, // { // auth_id=1.0 // }, // { // auth_id=3.0 // } // ] // --------------------------------------------------------------------------------------------------------------------- // SELECT * FROM users ORDER BY id DESC // --------------------------------------------------------------------------------------------------------------------- result = users.orderByDesc( 'id' ) Logger.log( result.hashes() ) // [ // { // id=5.0, // name=pochi, // mail=foo@gmail.com, // country_id=JPN // auth_id=3.0, // }, // { // id=4.0, // name=James, // mail=james@_gmail.com, // country_id=USA // auth_id=3.0, // }, // { // id=3.0, // name=Emma, // country_id=USA, // mail=emma@gmail.com // auth_id=1.0, // }, // { // id=2.0, // name=Dick, // country_id=USA, // mail=dick@_gmail.com, // auth_id=1.0 // }, // { // id=1.0, // name=John // country_id=USA, // mail=foo@_gmail.com, // auth_id=1.0, // } // ]レコード操作1
const users = McTable.use( { name: 'users' } ) const record1 = users.firstRecord //=> [ 1, 'John', 'foo@_gmail.com', 1, 'USA' ] McRecordはArrayクラスを継承しているので、基本的な振る舞いはArrayクラスと同じ record1.get( 'id' ) //=> 1 record1.get( 'name' ) //=> 'John' record1.get( 'mail' ) //=> 'foo@_gmail.com' record1.get( 'auth_id' ) //=> 1 record1.get( 'country_id' ) //=> 'USA' record1.set( 'id', 999 ) //=> [ 999, 'John', 'john@_gmail.com', 1, 'USA' ] record1.set( 'name', 'Smith' ) //=> [ 999, 'Smith', 'john@gmail.com', 1, 'USA' ] .set( 'mail', 'smith@_gmail.com' ) //=> [ 999, 'Smith', 'smith@_gmail.com', 1, 'USA' ] .set( 'auth_id', 2 ) //=> [ 999, 'Smith', 'smith@_gmail.com', 2, 'USA' ] .set( 'country_id', 'JPN' ) //=> [ 999, 'Smith', 'smith@_gmail.com', 2, 'JPN' ] .hash() //=> { id: 999, name: 'Smith' , mail: 'smith@_gmail.com', auth_id: 2, country_id: 'JPN' }レコード操作2
const users = McTable.use( { name: 'users' } ) let record // --------------------------------------------------------------------------------------------------------------------- // デフォルトモード(strict=false)、バリデートを通らなかったデータは''で登録 // --------------------------------------------------------------------------------------------------------------------- record = users.Record({ data: { id : 999, name : 'Smith' , mail : 'smith@_gmail.com', auth_id : 2, country_id: 'JPN' }, validators: { // 条件に一致しない( falseを返す )データを弾く id : McRecord.validators.number, name : McRecord.validators.string, mail : McRecord.validators.string, auth_id : McRecord.validators.string, // 数値型の値に文字列用のバリデーションを設定 country_id: McRecord.validators.string, } }) Logger.log( record ) // [999.0, Smith, smith@_gmail.com, 2.0, JPN] Logger.log( record.hash() ) // {name=Smith, country_id=JPN, mail=smith@_gmail.com, auth_id=, id=999.0} // auth_id=には空白が設定される Logger.log( record.get( 'mail' ) ) // "smith@_gmail.com" // --------------------------------------------------------------------------------------------------------------------- // strictモード(strict=true)、バリデートを通らなかったデータがある場合にエラーになる // --------------------------------------------------------------------------------------------------------------------- record = users.Record({ strict: true, data: { id : 999, name : 'Smith' , mail : 'smith@_gmail.com', auth_id : 2, country_id: 'JPN' }, validators: { // 条件に一致しない( falseを返す )データを弾く // バリデーションが設定されていない場合はデータの検証をしない auth_id: McRecord.validators.string, } }) // Error: Invalid Col [ auth_id ] Data [ 2 ] record = users.Record({ strict: true, data: { id : 999, name : 'Smith' , mail : 'smith@_gmail.com', auth_id : 2, country_id: 'JPN' }, validators: { // 条件に一致しない( falseを返す )データを弾く id : McRecord.validators.number, } }) // set()内でもバリデーションを行う record.set( 'id', 'aaa' ) // Error: Invalid Col [ id ] Data [ aaa ] record = McRecord.create({ strict: true, cols: [ 'id', 'name', 'mail', 'auth_id', 'country_id' ], data: { id : 999, name : 'Smith' , mail : 'smith@_gmail.com', auth_id : 2, country_id: 'JPN' }, validators: { auth_id: McRecord.validators.string, } }) // Error: Invalid Col [ auth_id ] Data [ 2 ] // --------------------------------------------------------------------------------------------------------------------- // 関数を介した作成 // --------------------------------------------------------------------------------------------------------------------- function createUsersRecord ( data: object ): McRecord { const validators = { // 設定されていないデータは検査しない id : McRecord.validators.number, name: McRecord.validators.string, mail: McRecord.validators.string, } return users.Record( { data, validators } ) } record = createUsersRecord({ id : 999, name : 'Smith' , mail : 'smith@_gmail.com', auth_id : 2, country_id: 'JPN' }) // --------------------------------------------------------------------------------------------------------------------- // バリデータ自作 // --------------------------------------------------------------------------------------------------------------------- // バリデーション用関数 function validateMail ( v: any ) { return isString( v ) && /.*@_gmail/.test( v ) } // バリデーション関数を登録 McRecord.setValidator( 'validateName', v => { return isString(v) }) record = users.Record({ data: { id : 999, name : 'Smith' , mail : 'smith@_gmail.com', auth_id : 2, country_id: 'JPN' }, validator: { /** * 条件に一致しない( falseを返す )データを弾く * @validator * @param { * } v * @returns { boolean } */ mail : validateMail, auth_id: v => v === 1 || v === 2 || v === 3, name : McRecord.validators.validateName } })トランザクション
users.begin({ // Set users.savepoints. // The savepoint is updated when the instance is created and when the begin function is executed or when the save function is executed // users.savepoints holds a duplicate instance of an object type // The latest version is recorded in users.latest in numeric type /** * @param { McTable } users */ handler: users => { users.insert( record ).commit() users.insert( records ).commit() users .insert( record ) // insert McRecord .insert( records ) // insert McRecord array .insert( depulicateUsers ) // insert Mctable records .insert({ // insert object id : 999, name : 'Smith', mail : 'smith@_gmail.com', auth_id : 2, country_id: 'JPN' }) .commit() // throw new Error( 'Error occurrence!' ) // It rolls back the data in the sheet using the instance that was saved in the savepoint when the error occurred. }, /** * @param { any } e Error object * @param { McTable } rollbacked */ exceptionHander: ( e, rollbacked ) => { Logger.log( e ) } })テーブル更新
users.begin({ handler ( users: McTable ) { users // レコードを一件インサート .insert(record1) // レコードを一件インサート .insert(record2) // 複数レコードをインサート .insert(records) // テーブルのレコードを纏めてインサート .insert(users) // nameがPochiのレコードを更新 .each(record => { const name = record.get( 'name' ) if ( name === 'Pochi' ) { record.set( 'name', 'Tama' ) } }) // シートへ反映 .commit() }, exceptionHander ( e: any, rollbackedTable: McTable ) { // エラー時にuser.begin()実行時点へシートをロールバック Logger.log( e ) } })
- 投稿日:2020-07-09T09:11:44+09:00
GASでORマッパー
@@ -1,546 +0,0 @@
-## はじめに
-GASでデータを取るのがめんどくさくてORマッパー的なものが欲しくなったので作りました。
-
-## 主な機能
-- テーブル操作
- - find,
- - select
- - discard
- - insert
- - inner
- - join
- - outer join
- - cross join
- - not
- - update
- - transaction (begin, save, commit, rollback)
- - record iterator
- - order by
- - sort
- - sub query
- - create
-- レコード操作
- - get
- - set (update)
- - validation
- - namespace- - create
-Github
-## 使い方
-#### プロジェクト新規作成
-```-$ npm run setup:create
-※途中でGoogleアカウントログインを要求されます。
-
-### 既存プロジェクトにアップする場合
-
-$ npm run setup:clone-```
-#### Docker起動・終了
-
-$ npm run docker:up
-$ npm run docker:down
-
-#### ログイン
-
-$ npm run login
-
-#### ソース監視・自動ビルド
-
-$ npm run watch
-
-#### プッシュ
-```
-$ npm run push-```
-### サンプル用テーブル(シート)作成
-
-
javascript
-global.growSeeds = function () {
- growSeeds()
-}
--※スクリプトエディタ上でグローバル関数
growSeeeds()
を実行してください。シートとデータが作成されます。-## Examples
-- サンプル用テーブル作成
- - users
- - countries
- - authorities
- - itarator
-- テーブル操作
- - query
- - sub query
- - inner join
- - outer join
- - cross join
- - update
- - transaction
-- レコード操作
- - record
- - namespace
- - validator
-- Api- - doGet
-### 一部サンプル
-
-#### GET
-``` javascript-declare var global: any;
-const users = McTable.use( { name: 'users' } ) // テーブル(シート)名渡す
-// spreadsheetを指定すると他のスプレットシートのデータを読み込ませられる
-// const users = McTable.use( { name: 'users', spreadsheet: SpreadsheetApp.getActiveSpreadsheet() } )
-const authorities = McTable.use( { name: 'authorities' } )-const countries = McTable.use( { name: 'countries' } )
-global.doGet = function ( e ) {
- const id = +e.parameter.id
- const resultTable = users
- // usersとauthoritiesをusersのauth_idとauthoritiesのidをキーに外部結合
- .leftOuterJoin( 'auth_id', authorities, 'id' )
- // 内部結合したテーブルとcountriesをusers.country_idとcountriesのidをもとに外部結合
- .leftOuterJoin( 'users.country_id', countries, 'id' )
- // 結合されたテーブルからusersのidをキーにレコード検索
- .find( { 'users.id': id } )
- // 抽出カラム選択
- .select( [
- 'users.id',
- 'users.name',
- 'countries.id',
- 'countries.name_ja',
- 'authorities.auth'
- ] )
- resultTable.each(record => {
- const countryId = record.get( 'countries.id' )
- if ( countryId === 'USA' ) {
- // 国籍変更
- record
- .set( 'countries.id', 'JPN' )
- .set( 'countries.name_ja', 'ジパング' )
- }
- const auth = record
- // いちいちauthorities.authと入力するのが面倒なのでネームスペースを設定
- .setNamespace( 'authorities' )
- // authorities.authのデータを取得
- .get( 'auth' )
- // authorities.authが'admin'の場合にレコードを上書き
- if ( auth === 'admin' ) {
- record.set( 'auth', '管理者' )
- }
- const mail = record
- // ネームスペースをリセット
- .resetNamespace()
- .get( 'users.mail' )
- // メールダドレスの登録がなければ変わりのアドレスを設定
- if ( mail === '' ) {
- record.set( 'users.mail', 'sample@_gmail.com' )
- }
- })
- const result = JSON.stringify({
- data: resultTable.hashes()
- })
- return ContentService.createTextOutput( result ); -} - -// <エントリーポイントURL>?id=1 -// こんな感じで帰ってくる -{
- "data":[
- {
- "users.id":1,
- "users.name":"John",
- "countries.id":"JPN",
- "countries.name_ja":"ジパング",
- "authorities.auth":"管理者"
- }
- ] -} -
- -#### レコード検索 -
javascript - -// テーブル取得 -const users = McTable.use( { name: 'users' } ) - -// --------------------------------------------------------------------------------------------------------------------- -// SELECT * FROM users WHERE id=1 -// --------------------------------------------------------------------------------------------------------------------- - -users.find( { id: 1 } ) -// foundUsers.data //=> [ [ 1, 'John', 'john@_gmail.com', 1, 'USA' ] ] -// foundUsers.cols //=> [ 'id', 'name', 'mail', 'auth_id', 'country_id' ] -// foundUsers.colsLength //=> 1 -// foundUsers.existsSheet //=> true -// foundUsers.existsCols //=> true -// foundUsers.existsRecords //=> true -// foundUsers.records //=> [ { McRecord } ] -// foundUsers.recordsLength //=> 1 -// foundUsers.firstRecord //=> { McRecord } -// foundUsers.lastRecord //=> { McRecord } -// foundUsers.mcSS //=> { McSS } -// foundUsers.mcSheet //=> { McSheet } -// foundUsers.savepoints //=> { McSheet } -// foundUsers.latest //=> { McSheet } - - -// --------------------------------------------------------------------------------------------------------------------- -// SELECT id, name FROM users WHERE id IN(1, 2) AND name="John" -// --------------------------------------------------------------------------------------------------------------------- - -result = users- .find( { id: [ 1, 2 ], name: 'John' } )
- .select( [ 'id', 'name' ] )
-Logger.log( result.hashes() )
-// [
-// {
-// name=John,
-// id=1.0
-// }-// ]
-// ---------------------------------------------------------------------------------------------------------------------
-// SELECT auth_id FROM (SELECT * FROM users WEHERE id NOT 1) WHERE id IN(1, 2, 3)-// ---------------------------------------------------------------------------------------------------------------------
-result = users.find( { id: [ 1, 2, 3, 4 ] } ).not( { id: 1 } ).select( [ 'auth_id' ] )
-Logger.log( result.hashes() )
-// [
-// {
-// auth_id=1.0
-// },
-// {
-// auth_id=1.0
-// },
-// {
-// auth_id=3.0
-// }-// ]
-// ---------------------------------------------------------------------------------------------------------------------
-// SELECT * FROM users ORDER BY id DESC-// ---------------------------------------------------------------------------------------------------------------------
-result = users.orderByDesc( 'id' )
-Logger.log( result.hashes() )
-// [
-// {
-// id=5.0,
-// name=pochi,
-// mail=foo@gmail.com,
-// country_id=JPN
-// auth_id=3.0,
-// },
-// {
-// id=4.0,
-// name=James,
-// mail=james@_gmail.com,
-// country_id=USA
-// auth_id=3.0,
-// },
-// {
-// id=3.0,
-// name=Emma,
-// country_id=USA,
-// mail=emma@gmail.com
-// auth_id=1.0,
-// },
-// {
-// id=2.0,
-// name=Dick,
-// country_id=USA,
-// mail=dick@_gmail.com,
-// auth_id=1.0
-// },
-// {
-// id=1.0,
-// name=John
-// country_id=USA,
-// mail=foo@_gmail.com,
-// auth_id=1.0,
-// }-// ]
-```
-#### レコード操作1
-``` javascript
-const users = McTable.use( { name: 'users' } )
-const record1 = users.firstRecord //=> [ 1, 'John', 'foo@_gmail.com', 1, 'USA' ] McRecordはArrayクラスを継承しているので、基本的な振る舞いはArrayクラスと同じ
-record1.get( 'id' ) //=> 1
-record1.get( 'name' ) //=> 'John'
-record1.get( 'mail' ) //=> 'foo@_gmail.com'
-record1.get( 'auth_id' ) //=> 1-record1.get( 'country_id' ) //=> 'USA'
-record1.set( 'id', 999 ) //=> [ 999, 'John', 'john@_gmail.com', 1, 'USA' ]
-record1.set( 'name', 'Smith' ) //=> [ 999, 'Smith', 'john@gmail.com', 1, 'USA' ]
- .set( 'mail', 'smith@_gmail.com' ) //=> [ 999, 'Smith', 'smith@_gmail.com', 1, 'USA' ]
- .set( 'auth_id', 2 ) //=> [ 999, 'Smith', 'smith@_gmail.com', 2, 'USA' ]
- .set( 'country_id', 'JPN' ) //=> [ 999, 'Smith', 'smith@_gmail.com', 2, 'JPN' ]
- .hash() //=> { id: 999, name: 'Smith' , mail: 'smith@_gmail.com', auth_id: 2, country_id: 'JPN' }-```
-#### レコード操作2
-``` javascript
-const users = McTable.use( { name: 'users' } )
-let record
-// ---------------------------------------------------------------------------------------------------------------------
-// デフォルトモード(strict=false)、バリデートを通らなかったデータは''で登録-// ---------------------------------------------------------------------------------------------------------------------
-record = users.Record({
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validators: {
- // 条件に一致しない( falseを返す )データを弾く
- id : McRecord.validators.number,
- name : McRecord.validators.string,
- mail : McRecord.validators.string,
- auth_id : McRecord.validators.string, // 数値型の値に文字列用のバリデーションを設定
- country_id: McRecord.validators.string,
- }-})
-Logger.log( record )
-// [999.0, Smith, smith@_gmail.com, 2.0, JPN]
-Logger.log( record.hash() )
-// {name=Smith, country_id=JPN, mail=smith@_gmail.com, auth_id=, id=999.0}-// auth_id=には空白が設定される
-Logger.log( record.get( 'mail' ) )
-// "smith@_gmail.com"
-
-// ---------------------------------------------------------------------------------------------------------------------
-// strictモード(strict=true)、バリデートを通らなかったデータがある場合にエラーになる-// ---------------------------------------------------------------------------------------------------------------------
-record = users.Record({
- strict: true,
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validators: {
- // 条件に一致しない( falseを返す )データを弾く
- // バリデーションが設定されていない場合はデータの検証をしない
- auth_id: McRecord.validators.string,
- }-})
-// Error: Invalid Col [ auth_id ] Data [ 2 ]
-record = users.Record({
- strict: true,
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validators: {
- // 条件に一致しない( falseを返す )データを弾く
- id : McRecord.validators.number,
- }-})
-// set()内でもバリデーションを行う
-record.set( 'id', 'aaa' )-// Error: Invalid Col [ id ] Data [ aaa ]
-
-record = McRecord.create({
- strict: true,
- cols: [ 'id', 'name', 'mail', 'auth_id', 'country_id' ],
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validators: {
- auth_id: McRecord.validators.string,
- }-})
-// Error: Invalid Col [ auth_id ] Data [ 2 ]
-
-// ---------------------------------------------------------------------------------------------------------------------
-// 関数を介した作成-// ---------------------------------------------------------------------------------------------------------------------
-function createUsersRecord ( data: object ): McRecord {
- const validators = {
- // 設定されていないデータは検査しない
- id : McRecord.validators.number,
- name: McRecord.validators.string,
- mail: McRecord.validators.string,- }
- return users.Record( { data, validators } ) -} - -record = createUsersRecord({
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN' -}) - - -// --------------------------------------------------------------------------------------------------------------------- -// バリデータ自作 -// --------------------------------------------------------------------------------------------------------------------- - -// バリデーション用関数 -function validateMail ( v: any ) {
- return isString( v ) && /.*@_gmail/.test( v ) -} - -// バリデーション関数を登録 -McRecord.setValidator( 'validateName', v => {
- return isString(v) -}) - - -record = users.Record({
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validator: {
- /**
- * 条件に一致しない( falseを返す )データを弾く
- * @validator
- * @param { * } v
- * @returns { boolean }
- */
- mail : validateMail,
- auth_id: v => v === 1 || v === 2 || v === 3,
- name : McRecord.validators.validateName
- } -}) - -
- - -#### トランザクション -
javascript -users.begin({- // Set users.savepoints.
- // The savepoint is updated when the instance is created and when the begin function is executed or when the save function is executed
- // users.savepoints holds a duplicate instance of an object type
- // The latest version is recorded in users.latest in numeric type
- /**
- * @param { McTable } users
- */
- handler: users => {
- users.insert( record ).commit()
- users.insert( records ).commit()
- users
- .insert( record ) // insert McRecord
- .insert( records ) // insert McRecord array
- .insert( depulicateUsers ) // insert Mctable records
- .insert({ // insert object
- id : 999,
- name : 'Smith',
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- })
- .commit()
- // throw new Error( 'Error occurrence!' )
- // It rolls back the data in the sheet using the instance that was saved in the savepoint when the error occurred.
- },
- /**
- * @param { any } e Error object
- * @param { McTable } rollbacked
- */
- exceptionHander: ( e, rollbacked ) => {
- Logger.log( e )
- } -}) -
- -#### テーブル更新 -
javascript -users.begin({- handler ( users: McTable ) {
- users
- // レコードを一件インサート
- .insert(record1)
- // レコードを一件インサート
- .insert(record2)
- // 複数レコードをインサート
- .insert(records)
- // テーブルのレコードを纏めてインサート
- .insert(users)
- // nameがPochiのレコードを更新
- .each(record => {
- const name = record.get( 'name' )
- if ( name === 'Pochi' ) {
- record.set( 'name', 'Tama' )
- }
- })
- // シートへ反映
- .commit()
- },
- exceptionHander ( e: any, rollbackedTable: McTable ) {
- // エラー時にuser.begin()実行時点へシートをロールバック
- Logger.log( e )
- } -}) - -```