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

近況

第一回Kakyoin.rb

8月9日 14時から、Kakyoin.rbの一回目のMeetupを片平堂で行います。 内容は、特に決めておらず、集まった人たちでRubyに関する何かをやります。 なお、参加希望は受け付けていません。 事前に声がけした近隣のRubyistの皆様で一杯になってしまったので。 片…

AngularJSの$httpや$resourceでのリクエストにAuthorizationヘッダーでの認証を付加する

個別のリクエストではなくインターセプターを使ってまとめて追加。 インターセプターを作って$httpProvider.interceptors配列に追加するだけ。 下記コードは、サーバからのtokenを取得済みなら、Authorizationヘッダーに追加してリクエストするようになる例…

One-time bindingと$resourceで気をつけること

前提 AngularJS1.3からOne-time bindingという最初の一回だけバインディングする仕組みが入った。 $resourceはpromiseではなく、先に空配列を返す。 問題 なので、下記のようにngRepeatをOne-time bindingにすると、空配列評価されて、何も表示されなくなっ…

近況

生存報告

OS X YosemiteにアップデートしたらHomebrewでインストールして自動起動設定にしていたnginxのサイトにアクセスできなくなった

mac

こういう設定で家庭内で食材検索のWebアプリを動かしていたが、動作させていたMac miniをYosemiteにアップデートしたらアプリのサイトにアクセスできなくなってしまった。 で、調べようとする過程でbrew doctorしようとしたらbrewコマンドも使えなくなってた…

AngularJSで$templateCacheを使ってまとめたテンプレートJSの中のCSSファイルや画像ファイルのリンクにhashをつける

grunt-filerevを使って、CSSファイルや画像ファイルにhashがbuild時につくようにしている場合に、grunt-angular-templatesを使う場合はどうするか generator-angularで作ったAngularJSプロジェクトのbuildタスクではgrunt-useminの処理中、grunt-filerevの処…

AngularJSで$templateCacheを使っている場合のテスト環境

ちなみにgenerator-angularで作成したプロジェクト。 developmentやbuildではgrunt-angular-templatesを使っているが、テストには、karma-ng-html2js-preprocessorを使った。 インストール % npm install karma-ng-html2js-preprocessor --save-dev karma.co…

AngularJSのカステムディレクティブで別のディレクティブをrequireしている場合のテストの書き方

前の記事のでいえばchildItemディレクティブのテストの書き方 コード再掲 #parentChild.coffee "use strict" #parent #controller angular.module("myApp") .controller("ParentItemCtrl", ($scope, Child) -> #....... @removeChildItem = (childId, index)…

AngularJSを1.2系から1.3.0にあげたらrequireした親のコントローラを使っているdirectiveでエラーが出た

コードはこんな "use strict" #parent #controller angular.module("myApp") .controller("ParentItemCtrl", ($scope,Child) -> #....... coffeeなので自動で波括弧をつけてくれるが明示的につけておいた ............ { removeChildItem: (childId, index)-…

RailsでPunditとshoulda-matchersを併用して、Rspecのcustom matchersが被った

Punditとshoulda-matchersにはpermitという同名のカスタムマッチャーがあって、衝突してしまう。 ので、punditのpermitは、spec_helper.rbでのrequire "pundit/rspec"をやめて、punditのカスタムマッチャーのpermitを使いたい個別のspecファイル、例えばuser…

AngularJSでネストしたコントローラをテストする

前提 AngularJSでコントローラをネストして階層化すると、子コントローラ側から親コントローラのスコープを利用可能になる。 問題 子コントローラのユニットテストを書こうとした場合に、子コントローラ側で親コントローラのプロパティやメソッドを使用して…

AngularJSのフォームで投稿後に再利用する際手付かずの状態に戻したい

例えば記事へのコメント投稿後に、そのフォームを再利用する際に、データを初期化しただけだとエラー表示が出てしまう。 ので、$dirtyがfalse($pristineがtrue)の状態に戻したい。 いわゆるブログのコメント投稿とかのよくあるやつ。 form.FormControllerの$…

RailsのResourcesでNestしてshallow: trueしたresourcesをAngularJSの$resourceで扱う

例えばこういう感じのresourcesを定義したとする。 APIの例。newとeditは省いた。 # routes.rb namespace :api, defaults: { format: :json } do resources :reports, shallow: true do resources :comments, except: [:new, :edit] end end 定義されるルー…

AngularJSで$sceを使ってるフィルタなんかのテスト

$sceをDIしてるやつ、例えばこちらのようなののテストを書く場合。 # newlines_spec.coffee "use strict" describe "Filter: newlines", -> beforeEach module "myApp" newlines = {} beforeEach inject ($filter) -> newlines = $filter "newlines" it "\nを<br />…

RailsでつくるAPIサーバのドキュメントを自動生成してくれるAutodocを使っていて気をつけること

Autodocとはなんぞやという方はこちらの記事を参照。 公式はこちら で、大変便利なAutodocだけど、注意点が2つ。 まず一点目はRspc3で動かない点。プルリクが上がってるが、取り込まれてない。 なので、forkして使ってる人が結構いる感じ。 2点目、通信が…

AngularJSのProtractorでngMockE2Eの$httpBackentを使ってテストを書く際に気をつけること

まだ理解が浅い模様。 注意というかexpectとwhenの違いの話。 前提 AngularJSにはngMockE2EというE2E用のモックが用意されており、こちらを使用することにより、サーバを用意しなくてもモックでテストが書ける。 * ngMockE2Eの$httpBackendにはngMockの$http…

AngularJSでInterceptorでHeaderを付与するようなケースのテスト

例えば$httpのリクエストをインターセプトして、Authorizationヘッダーにトークンを付与するInterceptorを作成したとする。 この場合、このInterceptorのサービスをどのようにテストするのがよいのか? で、調べたら大変素晴らしい記事があったのでそちらを…

UI-Bootstrapのmodalのテストで、$modalInstanceを使うControllerをテストしようとして、$modalInstanceをinjectしようとするところでUnknown providerとエラーが出る

公式のサンプルでいうと、ModalInstanceCtrl部分のテスト。 // modal-demo.js var ModalDemoCtrl = function ($scope, $modal, $log) { $scope.items = ['item1', 'item2', 'item3']; $scope.open = function (size) { var modalInstance = $modal.open({ te…

Rails4をJSON APIとして構築していてCreateのAPIに関連のID一覧をparameterとしてPOSTしてはまった

前提 1.Railsのwrap_parametersはJSONをRailsへ送った時にルート要素を省いてくれる。というか、省いて送ってもよしなにwrapしてくれる。 Railsのwrap_parametersは何をしてくれるのか? 2.has_manyを定義するとrelation_ids,relation_ids=というメソッドが…

grunt-wiredep使用の環境でjquery-uiのdatepickerのロケールとCSSを含みたい

grunt-wiredep使用の環境でAngularJSのui-dateでロケール指定したい&jquery-uiのCSSを当てたいと。 bower.jsonに追加してbower install bower.json { "dependencies": { "angular-ui-date": "latest" } } ui-dateがjquery-uiに依存しているので、jquery-ui…

grunt-wiredep使用の環境でmomentの日本語ロケールファイルを含めたい

より正確にいうとgrunt-wiredep使用の環境でangular-momentでロケール指定したい、ということ。 angular-momentをインストールする % bower install angular-moment --save これでmomentも依存関係でインストールされて、wiredepで差し込まれてめでたしめで…

ProtractorでngMockE2Eを読み込んでモックを使ってテストしている場合、build時にはngMockE2Eを除外したい

yeomanのgenerator-angularで作ったプロジェクトで、grunt-wiredepを使っているので、素直にE2Eテストでangular-mocksを使おうとすると、bower.jsonのdevDependenciesからdependenciesに移す必要がある。 // bower.json { "name": "MyApp", "version": "0.0.…

grunt-wiredep使用の環境でangular-i18nをbowerでインストールしたら注入できないとメッセージ

AngularJSリファレンス購入して読了。これは良い本。 で、フィルタのi18nの項をみて、早速いれてみたら、grunt-wiredepを使っているGruntのタスクで注入出来ないとメッセージが出て、htmlファイルのコメントの間にi18nへのscriptタグが挿入されない。 ちなみ…

Rails 4.1でhas_many :throughのuniq: trueはなくなってた

activerecord - Deprecation warning when using has_many :through :uniq in Rails 4 - Stack Overflow

Vagrant環境下でのgrunt watchでファイル監視の反映に時間がかかるので、webstormの自動保存を無効にした

↓ こちらのとおりです。 WebStorm/PhpStorm メモ - 自動保存を停止したい - {u:b} うーん、あまり変わらない気がする。別のところに原因がありそう。

Vagrant環境でload-grunt-taskを使ったGruntのtaskが遅いのでjit-gruntに変えた

インストール % npm install jit-grunt -D % npm uninstall load-grunt-tasks -D jit-gruntを使うようにGruntfile.coffeeを書き換え。 後、watchにspawn: falseも追加しといた。 #Gruntfile.coffee module.exports = (grunt) -> # Load grunt tasks automati…

deprecatedが出ていたngminからng-annotateへ切り替え

AngularJSのminify対策をしてくれるアレ。 例によって、generator-angularで作ったプロジェクトでの話。 grunt-ng-annotateをインストールしてgrunt-ngminを外して、記述をngminからngAnnotateにしただけでいけました。 % npm install grunt-ng-annotate -D …

CoffeeScriptでAngularJSのテスト書いている時に暗黙的に最後の行を returnする仕様に気をつける

まんまこれ↓ CoffeeScript で AngularJS のテストを書くときに気をつけること - Qiita 'use strict' describe 'Service: AwesomeInterceptor', -> httpProvider = {} # load the service's module beforeEach module 'myApp',($httpProvider)-> httpProvider…

Karma-Jasmineの出力結果表示形式をRspec風にしたい

そっけないです..... karma-spec-reporterをインストールして設定する。 % npm install karma-spec-reporter -D # karma.conf.coffee plugins: [ 'karma-phantomjs-launcher' 'karma-jasmine' 'karma-coffee-preprocessor' + 'karma-spec-reporter' 'karma-c…

Railsのwrap_parametersは何をしてくれるのか?

Action Controller Overview — Ruby on Rails Guides ↑ここに書いてある。 config/initializers/wrap_parameters.rbはRails4.1だとデフォルトで多分こうなっている。↓ Be sure to restart your server when you modify this file. # This file contains sett…

Yeomanのgenerate-angularで作成したプロジェクト(CoffeeScript)にKarma-Coverageを導入する

ココを見ましょう。 ありがとうございます。 やった内容 // package.json "karma-coverage": "git+https://github.com/mokemokechicken/karma-coverage.git#master", % npm l #karma.conf.js 'karma-phantomjs-launcher' 'karma-jasmine' 'karma-coffee-prep…

Vagrant環境でProtractorで使うSeleniumをstandalone serverにした

generator-angularで作ったプロジェクトにProtractorでのe2eテストを入れたやつをVagrant環境でアレする。 コレの続き https://github.com/exratione/protractor-selenium-server-cookbook:このクックブックを追加してよしなに設定する。 で、node_modules/p…

Yeomanのgenerator-angularで作ったプロジェクトをVagrant環境で開発する場合の設定

Yeomanで作ったプロジェクト関係なくて、単にVagrant環境で開発する時にホスト側のブラウザとかで確認したい時の話。 こういう場合にgrunt-contrib-connectの設定で、こういうのを見かける↓ #Gruntfile.coffee connect: options: port: 9000 livereload: 357…

Yeomanのgenerator-angularで作ったプロジェクトにE2EテストフレームワークのProtractorを導入してCoffeeScriptで書いたテストを実行する

generator-angularはkarma,jasmineのtestは用意されているけど、e2eテストはAngular Scenario Runner(非推奨)が入ってはいるものの使えるようになってないので、Protractorを入れる。 前提 yo angular --coffee でフロントエンド部を生成済みとする*1。 作業…

Yeomanのgenerator-angularとRailsの組み合わせでの開発環境構築

grunt-connect-proxyを使って、rails server と、grunt serve の2つを叩いてLiveReloadで開発出来るようにしようという話。 あとフロント側をビルドするとRailsのpublicディレクトリに静的ファイルとして配備するように。 RailsのAsset PipelineにAngularJS…

Deviseでnamespace使う場合はdevise_for :users, path: :adminとかしとけという話

メモ。 Devise使用時にroutesでadminとかのnamespaceにdevise_forを入れると,Devise::SessionsController等で authenticate_user! が authenticate_admin_user! とかなってしまう*1 # config/routes.rb namespace :admin do devise_for :users, controllers:…

個人事業主になって8年目に突入

多くの皆様のおかげでなんとかやれております。今後共よろしくお願い致します。

Middlemanの入れ子レイアウトでエラー undefined method `safe_concat' for "":String

slimでwrap_layout使おうとしてエラーった。- を = に。 wrap_layout doesn't work with slim 参考: wrap_layout doesn't work with slim on ~> 3.3.2 #1269

gulpfileをCoffeeScriptで書く

メモ。 //gulpfile.js require('coffee-script/register'); require('./gulpfile.coffee'); //gulpfile.coffee gulp = require('gulp') gulp.task 'default', () -> console.log('gulp!') 参考。 http://efcl.info/2014/0123/res3625/ http://safx-dev.blogs…

node-webkitでコールバックで書いた非同期処理をPromise使用に書き換えてみた

node-webkitで作ったアプリで、データロード処理と保存処理部分をそれぞれ書き換えてみた。 PromiseのライブラリはBluebirdを使ってみた。 あと、cheerioをDOMのパースに使用。 FTPは、jsftpを使用。 データロード処理の流れ(load) 1. FTPでデータ取得 2. FT…

node-webkitで作ったアプリをTypeScript化,CoffeeScript化してみての雑感

素のJavaScriptで書いて出来上がったnode-webkitアプリを今後の参考とするためにCoffeeScript化,TYpeScript化。 ライブラリ以外で書いたJSコードは300行程度と、かなり小規模なアプリ。*1 bowerで入れたのがBootstrap,Bootstrap v3 datetimepicker,jQuery,Mo…

node-webkitでTypeScriptを使ってはまるケース

node-webkitのJavaScript Contextでのrequireでのパス解決でハマる場合がある。 例えばこんなファイル構成で index.html js index.js(index.ts) fileUploader.js 各ファイルがこんな感じ。 <html> <head > <meta charset="utf-8" /> ................. <script src="js/index.js"></script> </body> </html> //js/index.js ........…

requireしてnewして使用するnpmのパッケージにTypeScript用の型定義ファイルを書く

こういうの。 ///<reference path='./typing/node.d.ts' /> ///<reference path='./typing/jsftp.d.ts' /> import JSFtp = require('jsftp'); .......................... var Ftp = new JSFtp({ host: connect.host, port: connect.port, user: connect.account, pass: connect.password }); .......................... jsftp用に…</reference></reference>

node-webkitでNode contextからGUIのAPIを使う

メニュー出したりとかデスクトップアプリ特有のネイティブのアレをNode側から使いたい。 1.require時に引数として渡す //index.js var gui = require('nw.gui'); //↓コレ var fileUploader = require('fileUploader')(gui); 例なので全部渡しちゃってるけど…

grunt-slim

メモ Gruntfile.coffee ...................................... slim: pretty: options: pretty: true files: [ expand: true cwd: 'src' src: ['{,*/}*.slim'] dest: 'app' ext: '.html' ] ...................................... grunt.loadNpmTasks('gr…

bower_componentsをディレクトリ別の場所に

.bowerrcに記述 { "directory": "app/bower_components" }

gruntで任意の場所でnpm i --productionする

node-webkitで作成したアプリのパッケージングはappディレクトリを対象として実行してて、npmをcd app してからnpm i --productionと手動で処理していたので、Gruntに登録した。 Gruntfile.coffeeの該当箇所 ...... exec: npm_i_production: cwd: 'app' cmd:…

node-webkitでWindows向けアプリケーションのアイコンを変更する

Icons に書いてある。 Resource Hackerで書き換える。 これだとWindowsのパッケージングが自動化出来ないのでアレ。

node-webkitで作ったアプリをWindows向けにパッケージングする

grunt-node-webkit-builder使う。 使う人の環境がWindowsだけど、一応Macも作っとく。 Gruntfile.coffeeはこんな感じ。appディレクトリに集めたファイルをパッケージング。 module.exports = (grunt) -> pkg = grunt.file.readJSON 'package.json' .........…