librails 0.0.8 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +5 -5
  2. data/app/helpers/librails/application_helper.rb +1 -1
  3. data/app/helpers/librails/db_utils.rb +5 -0
  4. data/app/models/librails/form_param.rb +11 -9
  5. data/lib/librails.rb +3 -0
  6. data/lib/librails/engine.rb +4 -0
  7. data/lib/librails/misc_utils.rb +13 -0
  8. data/lib/librails/model_utils.rb +108 -0
  9. data/lib/librails/version.rb +1 -1
  10. data/test/dummy/app/assets/javascripts/books.js +2 -0
  11. data/test/dummy/app/assets/stylesheets/books.css +4 -0
  12. data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
  13. data/test/dummy/app/controllers/books_controller.rb +58 -0
  14. data/test/dummy/app/helpers/books_helper.rb +2 -0
  15. data/test/dummy/app/models/book.rb +2 -0
  16. data/test/dummy/app/views/books/_form.html.erb +29 -0
  17. data/test/dummy/app/views/books/edit.html.erb +6 -0
  18. data/test/dummy/app/views/books/index.html.erb +31 -0
  19. data/test/dummy/app/views/books/new.html.erb +5 -0
  20. data/test/dummy/app/views/books/show.html.erb +19 -0
  21. data/test/dummy/config/routes.rb +1 -0
  22. data/test/dummy/db/development.sqlite3 +0 -0
  23. data/test/dummy/db/migrate/20161025052813_create_books.rb +11 -0
  24. data/test/dummy/db/schema.rb +9 -1
  25. data/test/dummy/db/test.sqlite3 +0 -0
  26. data/test/dummy/log/development.log +121 -0
  27. data/test/dummy/log/test.log +875 -0
  28. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-a/-a5ntVe_0-JosKC_U-LV0kALRyUIgn03H0eVSdQ8pAo.cache +1 -0
  29. data/test/dummy/tmp/cache/assets/sprockets/v3.0/2x/2xVmM6jHrzDyP1lp_LjSNgXh8HYZQ7UMeLoN7wQO2uM.cache +1 -0
  30. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4J/4JwVVgJQeLQmk-x6jORqWPEH5TYtWgMF-4GJupuMreM.cache +0 -0
  31. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4P/4Po6Zxf1klgk64Tw6mYOWnTGXYt4fqfrgbM_aUJwGpw.cache +0 -0
  32. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4Q/4Qo2DjyziGCKkz1oJV2GVlh8wX1CcV8pAS46Q7Qm7hI.cache +0 -0
  33. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5L/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +0 -0
  34. data/test/dummy/tmp/cache/assets/sprockets/v3.0/98/98JB3RlDHR57hBl-xqETG_I6j8A_Nq0odiAq7v00Myk.cache +1 -0
  35. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9h/9hWcOzybQOFoTeNjwVlrLZ5CFSgHv2mFQz1iT7DZsAM.cache +0 -0
  36. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9l/9lRpyWJfT2I3m8gijV7lkjQFoXhOKRq-qrktmY8jwqQ.cache +1 -0
  37. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9y/9y8VxpdidE2YHBhtV16bnLrhPEyaw00uRH9rGQrGiYo.cache +2 -0
  38. data/test/dummy/tmp/cache/assets/sprockets/v3.0/AN/ANELt8DAvX3T4rWiL73ZyAs9akz2xqaJ8oSTkjC8F4E.cache +0 -0
  39. data/test/dummy/tmp/cache/assets/sprockets/v3.0/B0/B0yDuvt2bL4_VgHHUwn0DSCgUg_Ubj4YjHffaiGCAL0.cache +0 -0
  40. data/test/dummy/tmp/cache/assets/sprockets/v3.0/CU/CUUNfrG7P9ppFhzKGMMhyineSvfddDpmm193O8hqWn8.cache +1 -0
  41. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DS/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +2 -0
  42. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Dm/DmmfrCpXtt74Hr6NO54lxyOCDv6klnDyBqeDFR7oDU8.cache +0 -0
  43. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Gr/Gr9XYAo8GbcW54Sm4tf2EnAzEUrmUcF3x29iJGtBs-A.cache +0 -0
  44. data/test/dummy/tmp/cache/assets/sprockets/v3.0/H4/H4oToPWSBBLRPAut47gvhtagG-ZlAjMvULFS1IlsDSQ.cache +1 -0
  45. data/test/dummy/tmp/cache/assets/sprockets/v3.0/HB/HB4_lJeXGMv1qlxwZfwDD0DQt9v9D3uJfs5M8Kgu3iw.cache +0 -0
  46. data/test/dummy/tmp/cache/assets/sprockets/v3.0/HE/HEA-bEdudX8qzqty72VsU6YCvuJV2OkyzRXpsXLoxFA.cache +0 -0
  47. data/test/dummy/tmp/cache/assets/sprockets/v3.0/HV/HVshoeO2Vki70_9KjCtwERcw7ODKGOGVYYDQIANp2UM.cache +0 -0
  48. data/test/dummy/tmp/cache/assets/sprockets/v3.0/I3/I3W61RA7E9U8gY3VOReLJalzQzVrSopciuNv6qcYmng.cache +0 -0
  49. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ic/IcuhBgC-nw3u2yhN8hnjRD6Qmzw3DbcuIBUqovrS6Hc.cache +0 -0
  50. data/test/dummy/tmp/cache/assets/sprockets/v3.0/JS/JSjnVos6CVam_6IKJcXZEgVG5kHcAauxq-yHnTn4mxE.cache +1 -0
  51. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ki/KifnWePy2kuI6EoY35NBONt3SPPPXzXWFUzy7YS0AXg.cache +1 -0
  52. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ld/LdOU9kh2e1UyWAH9vMD_vrJTydu8vLyj9RZRdtWZJJE.cache +1 -0
  53. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ms/MsWDjQABzh2_2l9wZzvXwvwaDXCKRqC_CHFqwpF3vfA.cache +1 -0
  54. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NP/NPTKYje_vsxbdQIwHZm4GQ9ctgNfDx_dGpmUY09mUQw.cache +0 -0
  55. data/test/dummy/tmp/cache/assets/sprockets/v3.0/OI/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +0 -0
  56. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Oo/OopMIscaD_StAXIYnIlx8woMEjgZf2uDXh17312pc5w.cache +1 -0
  57. data/test/dummy/tmp/cache/assets/sprockets/v3.0/PZ/PZM2O0pn21R_wlGR30OX0pQ4-zThf7ZxUhXihEKAcxM.cache +1 -0
  58. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Q0/Q0pvcN-Uyq45X4gQ1IIsx2hW2l933XYAVm66Lt-CcMg.cache +0 -0
  59. data/test/dummy/tmp/cache/assets/sprockets/v3.0/QY/QY4eYMS1Fh5SL6cZCo_OpPSZGx9e7vjDlEpwXT0AaRI.cache +1 -0
  60. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Un/Un1edWzWIIMQo9Q1V4Y3p58MSmZMO3ccQIABeCzt-es.cache +1 -0
  61. data/test/dummy/tmp/cache/assets/sprockets/v3.0/WJ/WJndgy_O4Z4_vIJzVJV49Oj7pXcrXAM2WToimOqHi94.cache +0 -0
  62. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YB/YBmLL8rNkJ9wDjR63wHcnw4HPQ2zc4_sUHBnCwCHmV8.cache +1 -0
  63. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YO/YOQwG9qoTCWsQaEUYqC2eU6VMwJ8eY5az9PWEg0YBVY.cache +1 -0
  64. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YZ/YZ5lr9CWjxm17X4Z6whrpsqGepK7FMkaMYke2pZeJkY.cache +0 -0
  65. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Z0/Z0v-Clv1RmCtHcZgsHm2Efklg2cOj1_vvXGxSZJYGmU.cache +0 -0
  66. data/test/dummy/tmp/cache/assets/sprockets/v3.0/a9/a9CMcRWEr_aXxa0Z54LL_mihjvWtKKhXEkjYUf1jbYg.cache +0 -0
  67. data/test/dummy/tmp/cache/assets/sprockets/v3.0/az/azSFX09wOk1dDEk1xyUuhOvndGRfhAQw7X3bhVUvbqk.cache +0 -0
  68. data/test/dummy/tmp/cache/assets/sprockets/v3.0/c4/c4wesegfvp3YOFFSsjDTtaqlTJT4wu9TEQwmOabiGBE.cache +1 -0
  69. data/test/dummy/tmp/cache/assets/sprockets/v3.0/di/diq4wNwLuxlJAo-1sx9AH3-mub_Z63HbEaidoP-u9LQ.cache +0 -0
  70. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dj/djpYduQfWsseWdaOi5NPjqzRTg-mdM1AuAl5fgbfRLI.cache +1 -0
  71. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dv/dvTANT0eJS1VHnH7LFBvahPvuDEVWCsoCxbVYEyZhzs.cache +0 -0
  72. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ek/ek29x0Bv7htoVKBJsvqHHHd4qD1hqohET5SJ3GHUe3c.cache +1 -0
  73. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gI/gIcGEFwVb02r2Kvp4JojiRH9FmhmT2W3zpbokUikgTM.cache +1 -0
  74. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gZ/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +2 -0
  75. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hZ/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +0 -0
  76. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jR/jRlfgMuDhdJ9DeARm8C34EzijHiSAEZi9IumOi8d8co.cache +1 -0
  77. data/test/dummy/tmp/cache/assets/sprockets/v3.0/je/jeF02OPMeSNXwtMncDIYKtOsYCK80N9cMVBag1DQcTU.cache +1 -0
  78. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jy/jyTlR0GRNS7XsvnoGBrqht7VoF8JHgPAhzzlPSI38Lg.cache +0 -0
  79. data/test/dummy/tmp/cache/assets/sprockets/v3.0/kf/kff_5LRygUIEBDA1u6MXzK09UFf90uCaOsLtaBgyGUQ.cache +0 -0
  80. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ll/lllxIh8TmYST5iT3pMMqEiiW2kVnV46e8apjHYV4NwQ.cache +0 -0
  81. data/test/dummy/tmp/cache/assets/sprockets/v3.0/lt/ltZ12Hb1MIwQ_x5JJ3RSyPYvs7uKQ6sobTXErisPSIo.cache +1 -0
  82. data/test/dummy/tmp/cache/assets/sprockets/v3.0/m4/m4PDLvfn6lwFaBlngbSJXSB_eLt6iyL5y4mX1QPdp40.cache +0 -0
  83. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nF/nFDSlhA0quhrqhaq_7tpg8xL130zYnfh0fSgdoKjyxs.cache +1 -0
  84. data/test/dummy/tmp/cache/assets/sprockets/v3.0/om/omT5fdYWQly0TYwKCjLTSkd4KnkiW3DBI7u_9iwQujM.cache +1 -0
  85. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pE/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +0 -0
  86. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pV/pVjei3DOBfiSnjFhJoxc5fnuoqkyxSZXVaXL-PtQOnM.cache +1 -0
  87. data/test/dummy/tmp/cache/assets/sprockets/v3.0/qo/qom3M3JruFGz9uj1CmP-jbPFnMOFh2r2KESBsGzKqSQ.cache +1 -0
  88. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rA/rAUGcozHSiZ93hwuQ5Ez0-DFNvpIp1pMSFzJDL6j5t0.cache +1 -0
  89. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rG/rGuMNcIUBp03kbJ6EzyYnC3CRj5goxzKZBmJYdmHAZQ.cache +0 -0
  90. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sU/sU3oqz4lk5ZBEidbxhSyI-aEf0xo5cuP8154BPYzRSQ.cache +0 -0
  91. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sZ/sZS3zy1fxZQjAPA_1FJ3AowfYeZce2J_6g44pGwLUm0.cache +0 -0
  92. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sj/sj16ZRag8S_gxUTofHpRMDlBfQtRrkOCTHE4XkpqTIw.cache +1 -0
  93. data/test/dummy/tmp/cache/assets/sprockets/v3.0/so/sor5uSsm2pcLDkIB_nEyeFtyH3H9JfHraQ06BUgKQDI.cache +1 -0
  94. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tO/tOhfPNHfUCZMMbxsrZ8QFkHIS4Kvl5n2uOQFyrtP8sg.cache +1 -0
  95. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vA/vASpagKbFH0ZvwZExZpP6xUozv_LZDLv2ChvkXLH9bM.cache +1 -0
  96. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vG/vGFQZSHgo_Z1jtdt-4UDi4Cq_rLRNs3NgVSnCC-00tk.cache +0 -0
  97. data/test/dummy/tmp/cache/assets/sprockets/v3.0/wt/wtPqYC4VZKO69pxoohTrsnCI_qisEoAEF_0a0cchBOs.cache +1 -0
  98. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xw/xw-pJ8PwbGRKiqJ9PyoPiRt1qJ2tGDRaVKQr5L83M24.cache +0 -0
  99. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zh/zhG0AnNGbV5bRFlZI647Ycb4OP62cNjN9sCGP2XSmLY.cache +0 -0
  100. data/test/fixtures/books.yml +11 -0
  101. data/test/integration/books_controller_test.rb +51 -0
  102. data/test/{librails_test.rb → lib/librails_test.rb} +7 -1
  103. data/test/lib/misc_utils_test.rb +8 -0
  104. data/test/lib/model_utils_test.rb +62 -0
  105. data/test/models/book_test.rb +8 -0
  106. metadata +213 -34
  107. data/README.rdoc +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c890f602347b27a6a2ecab1d66d26e8729985793
4
- data.tar.gz: c84b18986329428ca9253b5239af5aa9c7d8fe13
2
+ SHA256:
3
+ metadata.gz: a3aad5a76a6d9c629cf6387b64d341a804adabd632c8fdcfddef4dd0702bf45e
4
+ data.tar.gz: 031f1a09e924fb4350c3eb5618b4289e552a3d5525c27c932cbf9ad9153f36da
5
5
  SHA512:
6
- metadata.gz: 994052f719f7fbd9e48b75ba19fb43c6016ae8780f6c05f67b816507c17cca476525b94ad563626d0b8881864f55464e11f407fab6897de80be121bab04fcc46
7
- data.tar.gz: 6d4c2716c9a150f56af9afe31c5bf23dfd6ada0b57e935bd209e3d169d3a41315ec4e42da299a280108d5b1b47d5d518220ba33b10ee287b1d6be69ba2ce9e26
6
+ metadata.gz: bc1e6c57be67c423e2b0b46fe9c68fcd73bbc701d5ef4d30bea8bb92109df891541dbe1a24f9a20c81a6ffbc20c2e8fc09a374c1a6d8acfa232e4720722213f2
7
+ data.tar.gz: 252eb83a348d1b8dbc33256dc32429e6536e53e265c3ea2ee1ffe0dd2f5ab78d0f4e91240554762f85d2522de6bfa41d2946f23efe0909eda5427ec8156b5988
@@ -25,7 +25,7 @@ module Librails
25
25
  def ransack_value(params, value_param, query_param = 'q')
26
26
  q = params[query_param]
27
27
  return nil unless q
28
- return nil unless q.kind_of?(Hash)
28
+ return nil unless q.kind_of?(ActionController::Parameters)
29
29
  q[value_param]
30
30
  end
31
31
  end
@@ -0,0 +1,5 @@
1
+ module Librails
2
+ class DbUtils
3
+
4
+ end
5
+ end
@@ -1,13 +1,15 @@
1
1
  # coding: utf-8
2
- class FormParam
3
- def initialize(id, label = nil, value = nil)
4
- # 基本はIDとlabelvalueは特別な値を紐付けたい場合にのみ使用する。
5
- @id = id
6
- @label = label
7
- if @label.nil?
8
- @label = @id
2
+ module Librails
3
+ class FormParam
4
+ def initialize(id, label = nil, value = nil)
5
+ # 基本はIDとlabel。valueは特別な値を紐付けたい場合にのみ使用する。
6
+ @id = id
7
+ @label = label
8
+ if @label.nil?
9
+ @label = @id
10
+ end
11
+ @value = value
9
12
  end
10
- @value = value
13
+ attr_accessor :id, :label, :value
11
14
  end
12
- attr_accessor :id, :label, :value
13
15
  end
data/lib/librails.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  require "librails/engine"
2
+ #require "librails/version"
3
+ require "librails/misc_utils"
4
+ require "librails/model_utils"
2
5
 
3
6
  module Librails
4
7
  end
@@ -1,6 +1,10 @@
1
1
  module Librails
2
2
  class Engine < ::Rails::Engine
3
3
  isolate_namespace Librails
4
+
5
+ # Add a load path for this specific Engine
6
+ config.autoload_paths << File.expand_path("../../lib", __FILE__)
7
+
4
8
  initializer "librails.view_helper" do |app|
5
9
  ActiveSupport.on_load :action_view do
6
10
  require 'librails/view_helper'
@@ -0,0 +1,13 @@
1
+ module Librails
2
+ class MiscUtils
3
+ def self.rescue_mysql2_error(e)
4
+ if e.message =~ /Incorrect string value:/
5
+ # utf8mb4にすればいいのだ…。とりあえずそのばしのぎ。
6
+ puts e.message
7
+ else
8
+ puts e.message
9
+ puts e.backtrace
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,108 @@
1
+ module Librails
2
+ # Model related utilities
3
+ class SortItem
4
+ attr_accessor :item
5
+ attr_accessor :id, :array_index
6
+ end
7
+
8
+ class ModelUtils
9
+ def self.set_array_index(item, attr_name, index)
10
+ set_disp_order(item, attr_name, index + 1)
11
+ end
12
+
13
+ def self.get_array_index(item, attr_name)
14
+ get_disp_order(item, attr_name) - 1
15
+ end
16
+
17
+ def self.set_disp_order(item, attr_name, value)
18
+ item.send("#{attr_name}=", value)
19
+ end
20
+
21
+ def self.get_disp_order(item, attr_name)
22
+ item.send(attr_name)
23
+ end
24
+
25
+ def self.reorder(items, hash, attr_name = 'disp_order', hash_key = 'disp_order')
26
+ #items: ソート対象のオブジェクト(attr_nameで指定された属性で並び替えられている)
27
+ #hash: idと順番のハッシュ(hash_keyで指定された属性に新しい順番が指定されている)
28
+ # hash = {
29
+ # '10' => {'disp_order' => '1'},
30
+ # '20' => {'disp_order' => '2'},
31
+ # '30' => {'disp_order' => '2'},
32
+ # '40' => {'disp_order' => '1'},
33
+ #}
34
+
35
+ # 最初に1からインデックスを振り直す
36
+ items.each_with_index do |item, index|
37
+ set_array_index(item, attr_name, index)
38
+ end
39
+
40
+ # 前準備、ソート対象になるオブジェクトをまとめる
41
+ sort_items = []
42
+ hash.keys.each do |idstr|
43
+ disp_order = hash[idstr][hash_key]
44
+ next unless disp_order
45
+ new_index = disp_order.to_i - 1
46
+
47
+ # 範囲内に補正
48
+ if new_index < 0
49
+ new_index = 0
50
+ end
51
+ if new_index >= items.size - 1
52
+ new_index = items.size - 1
53
+ end
54
+
55
+ # IDでオブジェクトを検索
56
+ id = idstr.to_i
57
+ item = items.find{|s| s.id == id}
58
+ next if get_array_index(item, attr_name) == new_index #変化が無い場合は次へ
59
+
60
+ # index=順番に変更があるものはsorted_itemsに記憶
61
+ sort_item = SortItem.new
62
+ sort_item.item = item
63
+ sort_item.id = id
64
+ sort_item.array_index = new_index
65
+ sort_items << sort_item
66
+ end
67
+
68
+ # 入れ替える前にソートしておく。ただしい順で番号を入れ直すために必要。
69
+ # 例えば以下のような指定を考える
70
+ # 10
71
+ # 20
72
+ # 30
73
+ # 40 - 2
74
+ # 50 - 1
75
+ # a)2,1の順で入れると以下のようになる
76
+ # 50 - 1
77
+ # 10
78
+ # 40 - 2(3番目になってしまっている)
79
+ # 20
80
+ # 30
81
+ # b)1,2の順で入れると正しい
82
+ # 50 - 1
83
+ # 40 - 2
84
+ # 10
85
+ # 20
86
+ # 30
87
+
88
+ sort_items.sort!{|a, b|
89
+ r = a.array_index <=> b.array_index
90
+ if r == 0
91
+ r = a.id <=> b.id
92
+ end
93
+ r
94
+ }
95
+ # 新しい位置に挿入
96
+ sort_items.each do |sort_item|
97
+ item = sort_item.item
98
+ items.delete_at(items.index(item)) #ソートの途中で順番が変わっている可能性があるのでその都度検索する必要あり。deleteはdbが削除されるので使えない
99
+ items[sort_item.array_index, 0] = item
100
+ end
101
+ items.each_with_index do |item, index|
102
+ set_array_index(item, attr_name, index)
103
+ # item.child_index = index + 1
104
+ # print "after #{index} title=#{item.title} #{item.child_index}\n"
105
+ end
106
+ end
107
+ end
108
+ end
@@ -1,3 +1,3 @@
1
1
  module Librails
2
- VERSION = "0.0.8"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,56 @@
1
+ body { background-color: #fff; color: #333; }
2
+
3
+ body, p, ol, ul, td {
4
+ font-family: verdana, arial, helvetica, sans-serif;
5
+ font-size: 13px;
6
+ line-height: 18px;
7
+ }
8
+
9
+ pre {
10
+ background-color: #eee;
11
+ padding: 10px;
12
+ font-size: 11px;
13
+ }
14
+
15
+ a { color: #000; }
16
+ a:visited { color: #666; }
17
+ a:hover { color: #fff; background-color:#000; }
18
+
19
+ div.field, div.actions {
20
+ margin-bottom: 10px;
21
+ }
22
+
23
+ #notice {
24
+ color: green;
25
+ }
26
+
27
+ .field_with_errors {
28
+ padding: 2px;
29
+ background-color: red;
30
+ display: table;
31
+ }
32
+
33
+ #error_explanation {
34
+ width: 450px;
35
+ border: 2px solid red;
36
+ padding: 7px;
37
+ padding-bottom: 0;
38
+ margin-bottom: 20px;
39
+ background-color: #f0f0f0;
40
+ }
41
+
42
+ #error_explanation h2 {
43
+ text-align: left;
44
+ font-weight: bold;
45
+ padding: 5px 5px 5px 15px;
46
+ font-size: 12px;
47
+ margin: -7px;
48
+ margin-bottom: 0px;
49
+ background-color: #c00;
50
+ color: #fff;
51
+ }
52
+
53
+ #error_explanation ul li {
54
+ font-size: 12px;
55
+ list-style: square;
56
+ }
@@ -0,0 +1,58 @@
1
+ class BooksController < ApplicationController
2
+ before_action :set_book, only: [:show, :edit, :update, :destroy]
3
+
4
+ # GET /books
5
+ def index
6
+ @books = Book.all
7
+ end
8
+
9
+ # GET /books/1
10
+ def show
11
+ end
12
+
13
+ # GET /books/new
14
+ def new
15
+ @book = Book.new
16
+ end
17
+
18
+ # GET /books/1/edit
19
+ def edit
20
+ end
21
+
22
+ # POST /books
23
+ def create
24
+ @book = Book.new(book_params)
25
+
26
+ if @book.save
27
+ redirect_to @book, notice: 'Book was successfully created.'
28
+ else
29
+ render :new
30
+ end
31
+ end
32
+
33
+ # PATCH/PUT /books/1
34
+ def update
35
+ if @book.update(book_params)
36
+ redirect_to @book, notice: 'Book was successfully updated.'
37
+ else
38
+ render :edit
39
+ end
40
+ end
41
+
42
+ # DELETE /books/1
43
+ def destroy
44
+ @book.destroy
45
+ redirect_to books_url, notice: 'Book was successfully destroyed.'
46
+ end
47
+
48
+ private
49
+ # Use callbacks to share common setup or constraints between actions.
50
+ def set_book
51
+ @book = Book.find(params[:id])
52
+ end
53
+
54
+ # Only allow a trusted parameter "white list" through.
55
+ def book_params
56
+ params.require(:book).permit(:title, :author, :summary)
57
+ end
58
+ end
@@ -0,0 +1,2 @@
1
+ module BooksHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ class Book < ActiveRecord::Base
2
+ end
@@ -0,0 +1,29 @@
1
+ <%= form_for(@book) do |f| %>
2
+ <% if @book.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @book.errors.full_messages.each do |message| %>
8
+ <li><%= message %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="field">
15
+ <%= f.label :title %><br>
16
+ <%= f.text_field :title %>
17
+ </div>
18
+ <div class="field">
19
+ <%= f.label :author %><br>
20
+ <%= f.text_field :author %>
21
+ </div>
22
+ <div class="field">
23
+ <%= f.label :summary %><br>
24
+ <%= f.text_area :summary %>
25
+ </div>
26
+ <div class="actions">
27
+ <%= f.submit %>
28
+ </div>
29
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Editing Book</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Show', @book %> |
6
+ <%= link_to 'Back', books_path %>
@@ -0,0 +1,31 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <h1>Listing Books</h1>
4
+
5
+ <table>
6
+ <thead>
7
+ <tr>
8
+ <th>Title</th>
9
+ <th>Author</th>
10
+ <th>Summary</th>
11
+ <th colspan="3"></th>
12
+ </tr>
13
+ </thead>
14
+
15
+ <tbody>
16
+ <% @books.each do |book| %>
17
+ <tr>
18
+ <td><%= book.title %></td>
19
+ <td><%= book.author %></td>
20
+ <td><%= book.summary %></td>
21
+ <td><%= link_to 'Show', book %></td>
22
+ <td><%= link_to 'Edit', edit_book_path(book) %></td>
23
+ <td><%= link_to 'Destroy', book, method: :delete, data: { confirm: 'Are you sure?' } %></td>
24
+ </tr>
25
+ <% end %>
26
+ </tbody>
27
+ </table>
28
+
29
+ <br>
30
+
31
+ <%= link_to 'New Book', new_book_path %>
@@ -0,0 +1,5 @@
1
+ <h1>New Book</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Back', books_path %>
@@ -0,0 +1,19 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <p>
4
+ <strong>Title:</strong>
5
+ <%= @book.title %>
6
+ </p>
7
+
8
+ <p>
9
+ <strong>Author:</strong>
10
+ <%= @book.author %>
11
+ </p>
12
+
13
+ <p>
14
+ <strong>Summary:</strong>
15
+ <%= @book.summary %>
16
+ </p>
17
+
18
+ <%= link_to 'Edit', edit_book_path(@book) %> |
19
+ <%= link_to 'Back', books_path %>
@@ -1,4 +1,5 @@
1
1
  Rails.application.routes.draw do
2
2
 
3
+ resources :books
3
4
  mount Librails::Engine => "/librails"
4
5
  end