Skip to content

Instantly share code, notes, and snippets.

@mori-dev
mori-dev / payjp_checkout.js
Last active June 21, 2022 08:57
PAY.JP の Checkout 用の React.js コンポーネント
// @flow
import React, { Component } from 'react';
import { findDOMNode } from 'react-dom';
class PayjpCheckout extends Component {
constructor(props: Object) {
super(props);
this.windowAlertBackUp = window.alert;
this.script = document.createElement('script');
@mori-dev
mori-dev / sample_saga_test.js
Last active April 14, 2017 10:06
redux アプリで定期実行処理を書くには / saga のテスト
import assert from 'power-assert';
import { createMockTask } from 'redux-saga/lib/utils';
import { take, fork, cancel, put, call } from 'redux-saga/effects';
import { delay } from 'redux-saga';
import * as actions from '../../../src/actions/periodic_inspections/some_check';
import * as ActionTypes from '../../../src/actions/action_types';
import {
watchSampleTrigger,
worker,
intervalMs
@mori-dev
mori-dev / sample_middleware.js
Created April 14, 2017 10:04
redux アプリで定期実行処理を書くには / ミドルウェア
function businessLogic(store: any): {stopFlag: boolean} {
// なんらかのビジネスロジックを記述
// ミドルウェアでは次のようにステートを取り出せます。
// const stateName = store.getState().stateName;
return { stopFlag: false };
}
export default (store: any) => (next: any) => (action: any) => {
if (action.type === ActionTypes.CHECK_SAMPLE_EXEC) {
if (businessLogic(store).stopFlag) {
@mori-dev
mori-dev / sample_saga.js
Created April 14, 2017 10:03
redux アプリで定期実行処理を書くには / saga
// @flow
import 'babel-polyfill';
import { fork, take, call, put, cancel, cancelled } from 'redux-saga/effects';
import { delay } from 'redux-saga';
import { exec, end } from '../../actions/periodic_inspections/some_check';
import * as ActionTypes from '../../actions/action_types';
// test 用に export
export const intervalMs = Number(APP.INTERVAL_SAMPLE_CHECK);
@mori-dev
mori-dev / sample_action.js
Created April 14, 2017 10:02
redux アプリで定期実行処理を書くには / アクション
export function trigger(payload: any = {}, meta: any = {}): Action {
return {
type: ActionTypes.CHECK_SAMPLE_TRIGGER,
payload,
meta,
};
}
export function stop(payload: any = {}, meta: any = {}): Action {
return {

https://github.com/payjp/payjp-example/tree/master/sinatra が ruby 2.3.0p0 で動かなかった

% ruby -v                                                                                                   (git)-[master]
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
% PUBLIC_KEY=pk_test_0383a1b8f91e8a6e3ea0e2a9 SECRET_KEY=sk_test_c62fade9d045b54cd76d7036 ruby app.rb       (git)-[master]
== Sinatra (v1.4.8) has taken the stage on 4567 for development with backup from Puma
Puma starting in single mode...
* Version 3.6.0 (ruby 2.3.0-p0), codename: Sleepy Sunday Serenity
@mori-dev
mori-dev / saga.js
Last active April 11, 2017 11:56
プロミスでラップ
function* sendPlace(action: Action): Generator<any, any, any> {
try {
const response: any = yield call(Geo.sendPlace, action.payload, action.meta);
yield put(someSendPlaceOk(response));
} catch (error) {
yield put(someSendPlaceNg(error));
}
}
export function* watchGeoSendPlace(): Generator<any, any, any> {
@mori-dev
mori-dev / いまいちなコンポーネント.js
Created April 3, 2017 06:20
ビューでコールバック付きのメソッドを呼び出す
sendCurrentPlace(): void {
navigator.geolocation.getCurrentPosition(
(position) => {
const lat = position.coords.latitude;
const lng = position.coords.longitude;
const payload = { lat, lng };
this.props.SomeActions.someSendPlaceOk(payload);
},
(error) => {
this.props.SomeActions.someSendPlaceNg(error);
// components/common/app_text_field.js
// @flow
import React, { Component } from 'react';
import TextField from 'material-ui/TextField';
class AppTextField extends Component {
constructor(props: any) {
super(props);
machine:
node:
version: 6.7.0
timezone: Asia/Tokyo
post:
- npm install -g npm@3.10.7
- npm install -g yarn@0.19.1
dependencies:
cache_directories:
- "~/.yarn-cache"