Module: When::Coordinates::Temporal
- Includes:
- Parts::MethodCash
- Defined in:
- lib/when_exe/coordinates.rb
Overview
暦座標を扱う処理をまとめたモジュール
When::TM::Calendar
Defined Under Namespace
Modules: IndexConversion, OriginAndUpperDigits, OriginOnly
Constant Summary collapse
- HashProperty =
[[:origin_of_MSC, 0], [:origin_of_LSC, 0], [:index_of_MSC, 0], [:epoch_in_CE, 0], :unit, :base, :pair, :note, :location, :time_basis, :border, :formula, :domain]
Constants included from Parts::MethodCash
Instance Attribute Summary collapse
-
#base ⇒ Array<Integer, nil>
readonly
日時要素の下限.
-
#index_of_MSC ⇒ Integer
readonly
年/日のインデクス(index of most significant coordinate).
-
#indices ⇒ Array<When::Coordinates::Index>
readonly
インデクスオブジェクト.
-
#origin_of_LSC ⇒ Integer
readonly
日/秒の原点(origin of least significant coordinate).
-
#origin_of_MSC ⇒ Integer
readonly
年/日の原点(origin of most significant coordinate).
-
#pair ⇒ Array<Boolean>
readonly
日時要素がPairであるべきか.
-
#unit ⇒ Array<Integer, nil>
readonly
日時要素の要素数.
Instance Method Summary collapse
-
#_arrange_length(period) ⇒ Array<Numeric>
期間指定用 Array の桁数合わせ.
-
#_default_start ⇒ Object
対応する ::Date の start 属性.
-
#_encode(source, border = @border) ⇒ Array<Numeric>
日時要素の encode.
-
#_validate(source, other = nil, &block) ⇒ Array<Numeric>
日時要素の正規化.
-
#note ⇒ When::CalendarNote, Array<Array<klass, Array<klass, method, block>>>
代表暦注.
Methods included from Parts::MethodCash
_setup_, _setup_info, escape, #method_missing_
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
その他のメソッド
When::Coordinates::Temporal
2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 |
# File 'lib/when_exe/coordinates.rb', line 2069 def method_missing(name, *args, &block) unless When::Parts::MethodCash::Escape.key?(name) if note.respond_to?(name) if note.class::CalendarDepend instance_eval %Q{ def #{name}(*args, &block) @note.send("#{name}", *(args + [self]), &block) end } unless When::Parts::MethodCash.escape(name) return @note.send(name, *(args + [self]), &block) else instance_eval %Q{ def #{name}(*args, &block) @note.send("#{name}", *args, &block) end } unless When::Parts::MethodCash.escape(name) return @note.send(name, *args, &block) end end ['SolarTerms', 'LunarPhases'].each do |note| if When.CalendarNote(note).respond_to?(name) instance_eval %Q{ def #{name}(*args, &block) When.CalendarNote("#{note}").send("#{name}", *args, &block) end } unless When::Parts::MethodCash.escape(name) return When.CalendarNote(note).send(name, *args, &block) end end if When::Ephemeris::Formula.method_defined?(name) unless respond_to?(:forwarded_formula, true) extend When::Ephemeris::Formula::ForwardedFormula @formula ||= When::Ephemeris::Formula.new({:location=>@location}) @formula = When.Resource(Array(@formula), '_ep:') end instance_eval %Q{ def #{name}(*args, &block) forward = forwarded_formula("#{name}", args[0]) return forward.send("#{name}", *args, &block) if forward _method_missing("#{name}", *args, &block) end } unless When::Parts::MethodCash.escape(name) forward = forwarded_formula(name, args[0]) return forward.send(name, *args, &block) if forward end end _method_missing(name, *args, &block) end |
Instance Attribute Details
#base ⇒ Array<Integer, nil> (readonly)
日付/日時の外部表現の「下限」を指定する。内部表現の下限は常に 0 である。
日時要素の下限
サブクラスが定義するメソッド _coordinates_to_number, _number_to_coordinates は内部表現を使用する。
1668 1669 1670 |
# File 'lib/when_exe/coordinates.rb', line 1668 def base @base end |
#index_of_MSC ⇒ Integer (readonly)
年/日のインデクス(index of most significant coordinate)
1645 1646 1647 |
# File 'lib/when_exe/coordinates.rb', line 1645 def index_of_MSC @index_of_MSC end |
#indices ⇒ Array<When::Coordinates::Index> (readonly)
インデクスオブジェクト
1639 1640 1641 |
# File 'lib/when_exe/coordinates.rb', line 1639 def indices @indices end |
#origin_of_LSC ⇒ Integer (readonly)
日/秒の原点(origin of least significant coordinate)
1633 1634 1635 |
# File 'lib/when_exe/coordinates.rb', line 1633 def origin_of_LSC @origin_of_LSC end |
#origin_of_MSC ⇒ Integer (readonly)
年/日の原点(origin of most significant coordinate)
1627 1628 1629 |
# File 'lib/when_exe/coordinates.rb', line 1627 def origin_of_MSC @origin_of_MSC end |
#pair ⇒ Array<Boolean> (readonly)
日時要素がPairであるべきか
1678 1679 1680 |
# File 'lib/when_exe/coordinates.rb', line 1678 def pair @pair end |
#unit ⇒ Array<Integer, nil> (readonly)
日時要素の要素数
1655 1656 1657 |
# File 'lib/when_exe/coordinates.rb', line 1655 def unit @unit end |
Instance Method Details
#_arrange_length(period) ⇒ Array<Numeric>
期間指定用 Array の桁数合わせ
1727 1728 1729 1730 1731 1732 |
# File 'lib/when_exe/coordinates.rb', line 1727 def _arrange_length(period) return period unless period.kind_of?(Array) diff = @indices.length - period.length + 1 return period if (diff == 0) return (diff > 0) ? Array.new(diff, 0) + period : period[(-diff)..-1] end |
#_default_start ⇒ Object
対応する ::Date の start 属性
1737 1738 1739 |
# File 'lib/when_exe/coordinates.rb', line 1737 def _default_start ::Date::GREGORIAN end |
#_encode(source, border = @border) ⇒ Array<Numeric>
日時要素の encode
1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 |
# File 'lib/when_exe/coordinates.rb', line 1750 def _encode(source, border=@border) # source は非破壊 date = source.dup # 外部表現に戻す date[0] = +date[0] (@base.length-1).downto(@unit.length-1) do |i| date[i] = _from_index(date[0..i]) || date[i] + (@base[i]||0) end date[0] = source[0] # 結果を反映 date = border._adjust_epoch(date, self) if border _encode_upper_structure(date) end |
#_validate(source, other = nil, &block) ⇒ Array<Numeric>
日付要素と時刻要素に関連がある場合、block を指定して、両者の情報をやり取りする( yield で通日を渡し、通日を返してもらう)。
例1: 夏時間制を採用している場合、日付によって時刻の正規化の仕方が影響を受ける
例2: 日の境界が日没の場合、当該時刻が日没の前か後かで日付が変わる
日時要素の正規化
1717 1718 1719 |
# File 'lib/when_exe/coordinates.rb', line 1717 def _validate(source, other=nil, &block) return _encode(_decode(source, other, &block)) end |
#note ⇒ When::CalendarNote, Array<Array<klass, Array<klass, method, block>>>
代表暦注
1691 1692 1693 1694 1695 1696 1697 |
# File 'lib/when_exe/coordinates.rb', line 1691 def note case @note when String ; @note = When.CalendarNote(@note) when Array ; @note = When::CalendarNote.new(*@note) end @note end |