読者です 読者をやめる 読者になる 読者になる

ES6 でクラス変数(static変数)

JavaScript node.js ES6

ググってもあんまり情報ない感じだった。JS よく分からない。

たぶんこうすればいいんだと思う。

// user.js

class User {
    static add() {
        this.count++;
    }
}

User.count = 0;

module.exports = User;
// main.js

const User = require('./user.js');

console.log(User.count); // 0

User.add();

console.log(User.count); // 1

環境

% node -v
v6.3.1

ES6 環境構築

JavaScript ES6

インストール

$ npm i webpack babel-core babel-loader babel-preset-es2015 babel-polyfill -D
$ npm i babel-cli -D

babel の設定ファイルを追加

$ echo '{ "presets": ["es2015"] }' > .babelrc

webpack の設定ファイルを追加

// webpack.config.js

module.exports = {
    entry: './src/app.js',
    output: {
        path: __dirname + '/dist',
        filename: 'bundle.js'
    },
    module: {
        loaders: [{
            test: /\.js$/,
            exclude: /node_modules/,
            loader: 'babel-loader'
        }]
    }
};

サンプルコード

$ mkdir src
$ touch src/app.js src/myClass.js
// src/myClass.js

class MyClass {
  hello() {
  console.log(`Hello.`);
  }
}

module.exports = MyClass;
// src/app.js

require("babel-polyfill");
const MyClass = require('./myClass.js');

const myClass = new MyClass();
myClass.hello();

変更を検知してビルド

$ webpack -w

実行

$ node dist/bundle.js

参考

Rails で動的配信するアクションを宣言的に指定する

Rails Ruby

やりたかったこと

  • UserAgent に応じて動的配信したい
    • PC だったら通常の "#{action_name}.html.erb" を render したい
    • スマホだったら "mobile_#{action_name}.html.erb" を render したい
  • 動的配信するアクションを宣言的に指定するだけで render する view を振り分けたい

実装

動的に Module を生成して prepend することで実現できました。

 class PostsController < ApplicationController
+  prepend DynamicServing(:index, :show)
+
   def index
   end

   def create
   end
class ApplicationController < ActionController::Base
+  class << self
+    def DynamicServing(*actions)
+      Module.new do
+        actions.each do |action|
+          define_method action do
+            super()
+            render "mobile_#{action_name}" if browser.device.mobile?
+          end
+        end
+      end
+    end
+  end

UserAgent の判定には fnando/browser を使っています。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

  • 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/08/10
  • メディア: 大型本
  • この商品を含むブログ (22件) を見る