2010年6月26日土曜日

RhodesExtensions

以下のドキュメントは、英語の原文を日本語へ翻訳したものをRhomobile社の許可のもと、公開しています。
公式なドキュメントはRhomobile社のサイトをご覧ください。
また、この文書は2010/6/16(JST)の情報がもとになっています。
この日本語の翻訳について問題・質問などがある場合、コメントを残してください。それ以外については、本ドキュメント内にある問い合わせ先にお願いします。

The following document (a translation of the English original into Japanese) is published with Rhomobile permission.
If you need official documents, please visit Rhomobile site.
In addition, the following document is based on 2010/June/16 (JST) information.
If you have any question, problem about the Japanese translation, please leave your comment. Except for that, refer contacts in the document.


目次

サポートされるextensionとライブラリ

Rhodesを軽く保つために、我々はRubyコアの機能を超えてExtension(拡張機能)やライブラリを提供してません。Rhodesに必要でないもしくはスペースの都合で提供されなかった機能の例としては、Webサービス、XML、 pluralization、YAMLなどがあります。

我々のC/C++の実装は、オリジナルのRubyのCコード1.9リリースに基づいています。
またJava実装はRuby 1.8をサポートするXRubyに基づいています。(JRubyは使いませんでした。それはターゲットとなるモバイル・プラットフォームのほとんどで、JRubyがかなり大きくさらに必要なバージョンが利用可能ではなかったからです)。

どちらの実装でも、以下のようなコアクラスとモジュールをサポートします:



BasicObject, Object, Module, Class, Integer, Float, Numeric, Bignum, Rational, Complex, Math, String, StringScanner, StringIO,
Array, Hash, Struct, Regexp, RegexpError, MatchData, Data, NilClass, TrueClass, FalseClass, Comparable, Enumerable, Enumerator,
Converter, Marshal, IO, Dir, Time, Date, Signal, Mutex, Thread, ThreadGroup, Process, Fiber, FiberError, Method, UnboundMethod,
Binding, RubyVM, GC, Exception, SystemExit, fatal, SignalException, Interrupt, StandardError, TypeError, ArgumentError, IndexError,
KeyError, RangeError, ScriptError, SyntaxError, LoadError, NotImplementedError, NameError, NoMethodError, RuntimeError,
SecurityError, NoMemoryError, EncodingError, CompatibilityError, SystemCallError, Errno, ZeroDivisionError, FloatDomainError,
IOError, EOFError, ThreadError

我々は、異なるプラットフォーム間でrubyの互換性をテストするRubiniusのspecを採用している途中です。

Localization

例としてrhodes-system-api-samplesを参照してください。
Rhodesは英語以外の言語をサポートするためにlocalization_simplifiedライブラリを使用します。build.ymlに追加:

extensions: ["rholang"]

注:複数のextensionの場合は、拡張名とコンマの後にスペースを挿入します:

extensions: ["rholang", "net-http"]

appにutf-8エンコードされたファイルを作成します:

  <app_folder>/app/lang/lang_<lang_id>.rb

このファイルは、自動的にRhodesの現在のロケールに基づいてロードされます。例えば、lang_en.ebを作成する場合:

  module Localization
Views = {
:greeting => "This is test"

}
end

そして、ビューでこの文字列を使用します:

  • <%= Localization::Views[:greeting] %>
詳細
  • すべての非ASCII記号はutf-8エンコードである必要があります
  • 電話(デバイス)で現在のロケールを取得するには、System.get_localeメソッドを使用します。それは'en','de'などのロケールIDを返します。
  • 日付と時刻のローカライズ表示するには:
  Time.now.to_formatted_s(:long)
Time.now.strftime("%B %d, %Y %H:%M") # all names will be localized
Date.today.to_formatted_s(:long)
Date.today.strftime("%B %e, %Y") # all names will be localized
  • 通貨を表示するには:
Rho::NumberHelper.number_to_currency #see rails analog for details


jsonライブラリのサポート

パースにはRho::JSON.parseを使います。extensionは必要ありません。Rubyのコードの例:

parsed = Rho::JSON.parse("[{\"count\":10}]")

生成にJSON extensionを使用するにはbuild.ymlに追加:

extensions: ["json"]

注:複数のextensionの場合は、extension名とコンマの後にスペースを挿入:

extensions: ["json", "net-http"]

Rubyのコードの例:

   require 'json'

json_data = ::JSON.generate(some_object)

例は、System-Api-samplesを見てください。

REXMLライブラリのサポート

build.ymlに追加:

extensions: ["rexml", "set"]

Rubyのコードの例:

   require 'rexml/document'

file = File.new("bibliography.xml")
doc = REXML::Document.new(file)
puts doc
rhoxml(ベータ版)

これは、REXMLの縮小バージョンです。RhoxmlはREXMLと同じ構文ですが、サイズは小さくて高速です。REXMLは遅すぎるので、BlackBerryではこれが唯一の選択肢です。
build.ymlでrexmlをrhoxmlに変更するだけです:

extensions: ["rhoxml"]

これ以上の変更は不要です。
Rhoxmlの既知の問題:1.xmlのテキストのデコードは完全に実装されていません。document.rbの503行(Text::unnormalize)を見てください。非正規表現のデコードを実装する必要があります。

Fileutils

build.ymlに追加:

extensions: ["fileutils"]

注意:DryRun、NoWriteとVerboseはモジュールでコメントアウトされています。なぜならruby codeでevalを使っているからです。
BlackBerryはサポートされません。
可能なときはrubyの'Dir'クラスを使ってください。

Rubyスタンダードライブラリのサポートに関する詳細な注釈

iPhoneではDateクラスはサポートされています。

   require 'date'

puts Date.today.to_s

BlackBerryではDateはまだサポートされていません。代わりに以下を使います:

   require 'time'
Time.now.strftime('%Y-%m-%d')

Rhodesアプリケーションへライブラリを追加する

アプリ開発の過程で、Rhodesフレームワークが提供していない別の機能を外部rubyライブラリで追加する必要があるかもしれません。すべてのRubyライブラリがモバイルデバイス上で動作する保証はありませんが、必要なライブラリを追加・テストするために以下の手順を行うことができます。

Rhodesで必要なPATHは"app"サブディレクトリからの相対で、Rhodesクライアントにバンドルされます。

  • アプリケーションを"mynewapp"とすると、appディレクトリの下にlibディレクトリを作成します(たとえそれを何と呼ぼうと)。
cd mynewapp
mkdir app/lib
  • このディレクトリにrubyのファイルを追加します:
cp /path/to/my_lib.rb app/lib/my_lib.rb
  • そして、アプリケーション(たとえばcontroller.rb)で、次のようにこのライブラリをロードすることができます:
require 'rho/rhocontroller'

require 'lib/my_lib'

class TicketController < Rho::RhoController
def use_lib
@a = MyLib.new
...
end
end
  • "rubygems"はデバイスのRuby VMにロードされないことに注意してください。それはサイズの制約のためで、したがってすべてのサードパーティrubyライブラリのソースファイルは上記のようにlibディレクトリに配置する必要があります。

Rhodesフレームワークへライブラリを追加する

RhodesフレームワークにRubyのライブラリを追加するには2つの方法があり、基本的にはRhodesアプリケーションのbuild方法に依存します。

RubyGemsインストールでRhodesを使う場合、'rhodes-framework'gemのRubyGemsインストールディレクトリに外部のRubyライブラリを追加する必要があります。RubyGemsはインストールディレクトリはテーミナルで'gem env'コマンドで見つけることができます。

  • 例えば、Linuxのユーザーは次のディレクトリに追加のライブラリを置く可能性があります:
/usr/local/lib/ruby/gems/1.8/gems/rhodes-x.x.x/lib/framework
  • 同様に、MacのOSX 10.5は、それらをここに配置する可能性があります:
/Library/Ruby/Gems/1.8/gems/rhodes-x.x.x/lib/framework
  • Windowsの場合、この場所です:
C:/ruby/lib/ruby/gems/1.8/gems/rhodes-x.x.x/lib/framework


  • Rhodes Gitリポジトリのクローンを使用している場合は、次のディレクトリ(自分のgithubのフォーク上)へ追加のライブラリを置くことができます:
<rhodes-clone>/lib/framework


アプリケーションにライブラリを含めるのは、ライブラリを適切なディレクトリへ配置したあとは、簡単です。

  • ライブラリが正しい位置に追加されたと仮定して、Rhodesアプリケーションのコントローラからライブラリをrequireするには:
require 'libname'


これでRhodesフレームワークによって提供されない追加機能へアクセスするためのライブラリを使用することができます。

注:もう一度繰り返します。すべてのライブラリがRhodesで動作する保証はないと言う事を。


0 件のコメント: