/lib/ans-model-helpers/shared_examples/date_sumup.rb

https://github.com/answer/ans-model-helpers · Ruby · 162 lines · 156 code · 5 blank · 1 comment · 5 complexity · 3d89e25ca9ceda75543123cfc273fd0e MD5 · raw file

  1. # vi: set fileencoding=utf-8
  2. require "ans-model-helpers/shared_examples/sql"
  3. shared_examples_for "Ans::Model::Helpers::DateSumup" do
  4. describe ".date_in" do
  5. include Ans::Model::Helpers::SqlSpecHelper
  6. before do
  7. scope_は :date_in
  8. sql_は do |sql,p|
  9. sql << "SELECT"
  10. sql << " `#{table}`.*"
  11. sql << " FROM"
  12. sql << " `#{table}`"
  13. sql << " #{date_join}" if respond_to?(:date_join)
  14. sql << " WHERE"
  15. sql << " (#{date_column} >= '#{p[:from]}') AND (#{date_column} <= '#{p[:to]}')"
  16. end
  17. end
  18. context "指定日の範囲で検索した場合" do
  19. before do
  20. scope_の引数は day: DateTime.new(2011, 1, 1)
  21. sql_の引数は from: "2011-01-01 00:00:00", to: "2011-01-01 23:59:59"
  22. end
  23. it_should_behave_like "Ans::Model::Helpers::Sql"
  24. end
  25. context "指定範囲で検索した場合" do
  26. before do
  27. scope_の引数は from: DateTime.new(2011, 1, 1), to: DateTime.new(2011, 1, 31)
  28. sql_の引数は from: "2011-01-01 00:00:00", to: "2011-01-31 23:59:59"
  29. end
  30. it_should_behave_like "Ans::Model::Helpers::Sql"
  31. end
  32. end
  33. describe ".day_in" do
  34. context "日付指定無しの場合" do
  35. it "は、今日の日付で範囲指定したスコープの配列を返す" do
  36. stub(DateTime).now{DateTime.new(2011,1,10)}
  37. model.day_in({}).should == [
  38. model.date_in(day: DateTime.new(2011, 1, 10)),
  39. "2011-01-10",
  40. ]
  41. end
  42. end
  43. context "day 指定の場合" do
  44. it "は、指定した日付で範囲指定したスコープの配列を返す" do
  45. model.day_in(day: "2011-01-03").should == [
  46. model.date_in(day: DateTime.new(2011, 1, 3)),
  47. "2011-01-03",
  48. ]
  49. end
  50. end
  51. end
  52. describe ".days_in" do
  53. context "日付指定無しの場合" do
  54. it "は、今月の日付で範囲指定したスコープの配列を返す" do
  55. stub(DateTime).now{DateTime.new(2011,1,10)}
  56. model.days_in({}).should == [
  57. [
  58. [DateTime.new(2011, 1, 1), model.date_in(day: DateTime.new(2011, 1, 1))],
  59. [DateTime.new(2011, 1, 2), model.date_in(day: DateTime.new(2011, 1, 2))],
  60. [DateTime.new(2011, 1, 3), model.date_in(day: DateTime.new(2011, 1, 3))],
  61. [DateTime.new(2011, 1, 4), model.date_in(day: DateTime.new(2011, 1, 4))],
  62. [DateTime.new(2011, 1, 5), model.date_in(day: DateTime.new(2011, 1, 5))],
  63. [DateTime.new(2011, 1, 6), model.date_in(day: DateTime.new(2011, 1, 6))],
  64. [DateTime.new(2011, 1, 7), model.date_in(day: DateTime.new(2011, 1, 7))],
  65. [DateTime.new(2011, 1, 8), model.date_in(day: DateTime.new(2011, 1, 8))],
  66. [DateTime.new(2011, 1, 9), model.date_in(day: DateTime.new(2011, 1, 9))],
  67. [DateTime.new(2011, 1, 10), model.date_in(day: DateTime.new(2011, 1, 10))],
  68. [DateTime.new(2011, 1, 11), model.date_in(day: DateTime.new(2011, 1, 11))],
  69. [DateTime.new(2011, 1, 12), model.date_in(day: DateTime.new(2011, 1, 12))],
  70. [DateTime.new(2011, 1, 13), model.date_in(day: DateTime.new(2011, 1, 13))],
  71. [DateTime.new(2011, 1, 14), model.date_in(day: DateTime.new(2011, 1, 14))],
  72. [DateTime.new(2011, 1, 15), model.date_in(day: DateTime.new(2011, 1, 15))],
  73. [DateTime.new(2011, 1, 16), model.date_in(day: DateTime.new(2011, 1, 16))],
  74. [DateTime.new(2011, 1, 17), model.date_in(day: DateTime.new(2011, 1, 17))],
  75. [DateTime.new(2011, 1, 18), model.date_in(day: DateTime.new(2011, 1, 18))],
  76. [DateTime.new(2011, 1, 19), model.date_in(day: DateTime.new(2011, 1, 19))],
  77. [DateTime.new(2011, 1, 20), model.date_in(day: DateTime.new(2011, 1, 20))],
  78. [DateTime.new(2011, 1, 21), model.date_in(day: DateTime.new(2011, 1, 21))],
  79. [DateTime.new(2011, 1, 22), model.date_in(day: DateTime.new(2011, 1, 22))],
  80. [DateTime.new(2011, 1, 23), model.date_in(day: DateTime.new(2011, 1, 23))],
  81. [DateTime.new(2011, 1, 24), model.date_in(day: DateTime.new(2011, 1, 24))],
  82. [DateTime.new(2011, 1, 25), model.date_in(day: DateTime.new(2011, 1, 25))],
  83. [DateTime.new(2011, 1, 26), model.date_in(day: DateTime.new(2011, 1, 26))],
  84. [DateTime.new(2011, 1, 27), model.date_in(day: DateTime.new(2011, 1, 27))],
  85. [DateTime.new(2011, 1, 28), model.date_in(day: DateTime.new(2011, 1, 28))],
  86. [DateTime.new(2011, 1, 29), model.date_in(day: DateTime.new(2011, 1, 29))],
  87. [DateTime.new(2011, 1, 30), model.date_in(day: DateTime.new(2011, 1, 30))],
  88. [DateTime.new(2011, 1, 31), model.date_in(day: DateTime.new(2011, 1, 31))],
  89. ],
  90. model.date_in(from: DateTime.new(2011, 1, 1), to: DateTime.new(2011, 1, 31)),
  91. ["2011-01-01","2011-01-31"],
  92. ]
  93. end
  94. end
  95. context "month 指定の場合" do
  96. it "は、指定した月の日付で範囲指定したスコープの配列を返す" do
  97. model.days_in(month: "2011-01-01").should == [
  98. [
  99. [DateTime.new(2011, 1, 1), model.date_in(day: DateTime.new(2011, 1, 1))],
  100. [DateTime.new(2011, 1, 2), model.date_in(day: DateTime.new(2011, 1, 2))],
  101. [DateTime.new(2011, 1, 3), model.date_in(day: DateTime.new(2011, 1, 3))],
  102. [DateTime.new(2011, 1, 4), model.date_in(day: DateTime.new(2011, 1, 4))],
  103. [DateTime.new(2011, 1, 5), model.date_in(day: DateTime.new(2011, 1, 5))],
  104. [DateTime.new(2011, 1, 6), model.date_in(day: DateTime.new(2011, 1, 6))],
  105. [DateTime.new(2011, 1, 7), model.date_in(day: DateTime.new(2011, 1, 7))],
  106. [DateTime.new(2011, 1, 8), model.date_in(day: DateTime.new(2011, 1, 8))],
  107. [DateTime.new(2011, 1, 9), model.date_in(day: DateTime.new(2011, 1, 9))],
  108. [DateTime.new(2011, 1, 10), model.date_in(day: DateTime.new(2011, 1, 10))],
  109. [DateTime.new(2011, 1, 11), model.date_in(day: DateTime.new(2011, 1, 11))],
  110. [DateTime.new(2011, 1, 12), model.date_in(day: DateTime.new(2011, 1, 12))],
  111. [DateTime.new(2011, 1, 13), model.date_in(day: DateTime.new(2011, 1, 13))],
  112. [DateTime.new(2011, 1, 14), model.date_in(day: DateTime.new(2011, 1, 14))],
  113. [DateTime.new(2011, 1, 15), model.date_in(day: DateTime.new(2011, 1, 15))],
  114. [DateTime.new(2011, 1, 16), model.date_in(day: DateTime.new(2011, 1, 16))],
  115. [DateTime.new(2011, 1, 17), model.date_in(day: DateTime.new(2011, 1, 17))],
  116. [DateTime.new(2011, 1, 18), model.date_in(day: DateTime.new(2011, 1, 18))],
  117. [DateTime.new(2011, 1, 19), model.date_in(day: DateTime.new(2011, 1, 19))],
  118. [DateTime.new(2011, 1, 20), model.date_in(day: DateTime.new(2011, 1, 20))],
  119. [DateTime.new(2011, 1, 21), model.date_in(day: DateTime.new(2011, 1, 21))],
  120. [DateTime.new(2011, 1, 22), model.date_in(day: DateTime.new(2011, 1, 22))],
  121. [DateTime.new(2011, 1, 23), model.date_in(day: DateTime.new(2011, 1, 23))],
  122. [DateTime.new(2011, 1, 24), model.date_in(day: DateTime.new(2011, 1, 24))],
  123. [DateTime.new(2011, 1, 25), model.date_in(day: DateTime.new(2011, 1, 25))],
  124. [DateTime.new(2011, 1, 26), model.date_in(day: DateTime.new(2011, 1, 26))],
  125. [DateTime.new(2011, 1, 27), model.date_in(day: DateTime.new(2011, 1, 27))],
  126. [DateTime.new(2011, 1, 28), model.date_in(day: DateTime.new(2011, 1, 28))],
  127. [DateTime.new(2011, 1, 29), model.date_in(day: DateTime.new(2011, 1, 29))],
  128. [DateTime.new(2011, 1, 30), model.date_in(day: DateTime.new(2011, 1, 30))],
  129. [DateTime.new(2011, 1, 31), model.date_in(day: DateTime.new(2011, 1, 31))],
  130. ],
  131. model.date_in(from: DateTime.new(2011, 1, 1), to: DateTime.new(2011, 1, 31)),
  132. ["2011-01-01","2011-01-31"],
  133. ]
  134. end
  135. end
  136. context "from, to 指定の場合" do
  137. it "は、指定した範囲で範囲指定したスコープの配列を返す" do
  138. model.days_in(from: "2011-01-01", to: "2011-01-10").should == [
  139. [
  140. [DateTime.new(2011, 1, 1), model.date_in(day: DateTime.new(2011, 1, 1))],
  141. [DateTime.new(2011, 1, 2), model.date_in(day: DateTime.new(2011, 1, 2))],
  142. [DateTime.new(2011, 1, 3), model.date_in(day: DateTime.new(2011, 1, 3))],
  143. [DateTime.new(2011, 1, 4), model.date_in(day: DateTime.new(2011, 1, 4))],
  144. [DateTime.new(2011, 1, 5), model.date_in(day: DateTime.new(2011, 1, 5))],
  145. [DateTime.new(2011, 1, 6), model.date_in(day: DateTime.new(2011, 1, 6))],
  146. [DateTime.new(2011, 1, 7), model.date_in(day: DateTime.new(2011, 1, 7))],
  147. [DateTime.new(2011, 1, 8), model.date_in(day: DateTime.new(2011, 1, 8))],
  148. [DateTime.new(2011, 1, 9), model.date_in(day: DateTime.new(2011, 1, 9))],
  149. [DateTime.new(2011, 1, 10), model.date_in(day: DateTime.new(2011, 1, 10))],
  150. ],
  151. model.date_in(from: DateTime.new(2011, 1, 1), to: DateTime.new(2011, 1, 10)),
  152. ["2011-01-01","2011-01-10"],
  153. ]
  154. end
  155. end
  156. end
  157. end