sbf 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +21 -0
- data/app/assets/javascripts/application.js +15 -0
- data/app/assets/javascripts/map.js +665 -0
- data/app/assets/javascripts/onemap.js +1928 -0
- data/app/assets/javascripts/units.js.coffee +3 -0
- data/app/assets/stylesheets/application.css +13 -0
- data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
- data/app/assets/stylesheets/scaffolds.css.scss +69 -0
- data/app/assets/stylesheets/units.css.scss +3 -0
- data/app/controllers/application_controller.rb +5 -0
- data/app/controllers/buses_controller.rb +5 -0
- data/app/controllers/units_controller.rb +74 -0
- data/app/helpers/application_helper.rb +2 -0
- data/app/helpers/units_helper.rb +2 -0
- data/app/models/ability.rb +39 -0
- data/app/models/block.rb +163 -0
- data/app/models/estate.rb +70 -0
- data/app/models/quota.rb +80 -0
- data/app/models/settings.rb +4 -0
- data/app/models/unit.rb +121 -0
- data/app/views/blocks/_map.html.erb +37 -0
- data/app/views/kaminari/twitter-bootstrap/_first_page.html.haml +8 -0
- data/app/views/kaminari/twitter-bootstrap/_last_page.html.haml +8 -0
- data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +19 -0
- data/app/views/layouts/application.html.erb +14 -0
- data/app/views/layouts/rails_admin/application.html.haml +31 -0
- data/app/views/units/_form.html.erb +37 -0
- data/app/views/units/edit.html.erb +6 -0
- data/app/views/units/index.html.erb +30 -0
- data/app/views/units/index.json.jbuilder +4 -0
- data/app/views/units/new.html.erb +5 -0
- data/app/views/units/show.html.erb +29 -0
- data/app/views/units/show.json.jbuilder +1 -0
- data/config/initializers/rails_admin.rb +203 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20130721172422_create_blocks.rb +17 -0
- data/db/migrate/20130721173925_create_units.rb +16 -0
- data/db/migrate/20130721205526_create_estates.rb +12 -0
- data/db/migrate/20130722004104_add_estate_id_to_block.rb +5 -0
- data/db/migrate/20130722004318_update_estate_id_for_blocks.rb +13 -0
- data/db/migrate/20130722010900_remove_estate_from_blocks.rb +5 -0
- data/db/migrate/20130722105351_fix_numeric_columns.rb +39 -0
- data/db/migrate/20130910145656_create_quota.rb +16 -0
- data/db/migrate/20130910151554_populate_quota_table.rb +35 -0
- data/db/migrate/20130912181314_remove_ethnic_quota_from_blocks.rb +5 -0
- data/db/schema.rb +68 -0
- data/lib/kml/busstops-kml-105.kml +156 -0
- data/lib/kml/busstops-kml-106.kml +368 -0
- data/lib/kml/busstops-kml-108.kml +156 -0
- data/lib/kml/busstops-kml-135.kml +181 -0
- data/lib/kml/busstops-kml-136.kml +792 -0
- data/lib/kml/busstops-kml-137.kml +675 -0
- data/lib/kml/busstops-kml-138.kml +634 -0
- data/lib/kml/busstops-kml-139.kml +323 -0
- data/lib/kml/busstops-kml-140.kml +156 -0
- data/lib/kml/busstops-kml-165.kml +207 -0
- data/lib/kml/busstops-kml-166.kml +622 -0
- data/lib/kml/busstops-kml-167.kml +554 -0
- data/lib/kml/busstops-kml-168.kml +840 -0
- data/lib/kml/busstops-kml-169.kml +1401 -0
- data/lib/kml/busstops-kml-170.kml +1171 -0
- data/lib/kml/busstops-kml-171.kml +225 -0
- data/lib/kml/busstops-kml-187.kml +225 -0
- data/lib/kml/busstops-kml-188.kml +179 -0
- data/lib/kml/busstops-kml-196.kml +646 -0
- data/lib/kml/busstops-kml-197.kml +662 -0
- data/lib/kml/busstops-kml-198.kml +1005 -0
- data/lib/kml/busstops-kml-199.kml +1052 -0
- data/lib/kml/busstops-kml-200.kml +1331 -0
- data/lib/kml/busstops-kml-201.kml +1351 -0
- data/lib/kml/busstops-kml-218.kml +248 -0
- data/lib/kml/busstops-kml-219.kml +179 -0
- data/lib/kml/busstops-kml-220.kml +248 -0
- data/lib/kml/busstops-kml-221.kml +225 -0
- data/lib/kml/busstops-kml-225.kml +179 -0
- data/lib/kml/busstops-kml-226.kml +363 -0
- data/lib/kml/busstops-kml-227.kml +849 -0
- data/lib/kml/busstops-kml-228.kml +1015 -0
- data/lib/kml/busstops-kml-229.kml +759 -0
- data/lib/kml/busstops-kml-230.kml +557 -0
- data/lib/kml/busstops-kml-231.kml +998 -0
- data/lib/kml/busstops-kml-232.kml +2153 -0
- data/lib/kml/busstops-kml-233.kml +498 -0
- data/lib/kml/busstops-kml-234.kml +502 -0
- data/lib/kml/busstops-kml-235.kml +249 -0
- data/lib/kml/busstops-kml-249.kml +248 -0
- data/lib/kml/busstops-kml-250.kml +179 -0
- data/lib/kml/busstops-kml-251.kml +455 -0
- data/lib/kml/busstops-kml-252.kml +409 -0
- data/lib/kml/busstops-kml-253.kml +570 -0
- data/lib/kml/busstops-kml-254.kml +202 -0
- data/lib/kml/busstops-kml-256.kml +363 -0
- data/lib/kml/busstops-kml-257.kml +536 -0
- data/lib/kml/busstops-kml-258.kml +515 -0
- data/lib/kml/busstops-kml-259.kml +774 -0
- data/lib/kml/busstops-kml-260.kml +536 -0
- data/lib/kml/busstops-kml-261.kml +738 -0
- data/lib/kml/busstops-kml-262.kml +783 -0
- data/lib/kml/busstops-kml-263.kml +1044 -0
- data/lib/kml/busstops-kml-264.kml +543 -0
- data/lib/kml/busstops-kml-265.kml +624 -0
- data/lib/kml/busstops-kml-266.kml +934 -0
- data/lib/kml/busstops-kml-267.kml +883 -0
- data/lib/kml/busstops-kml-268.kml +187 -0
- data/lib/kml/busstops-kml-280.kml +271 -0
- data/lib/kml/busstops-kml-281.kml +248 -0
- data/lib/kml/busstops-kml-282.kml +639 -0
- data/lib/kml/busstops-kml-283.kml +501 -0
- data/lib/kml/busstops-kml-284.kml +432 -0
- data/lib/kml/busstops-kml-285.kml +432 -0
- data/lib/kml/busstops-kml-286.kml +363 -0
- data/lib/kml/busstops-kml-287.kml +272 -0
- data/lib/kml/busstops-kml-288.kml +792 -0
- data/lib/kml/busstops-kml-289.kml +801 -0
- data/lib/kml/busstops-kml-290.kml +673 -0
- data/lib/kml/busstops-kml-291.kml +474 -0
- data/lib/kml/busstops-kml-292.kml +256 -0
- data/lib/kml/busstops-kml-293.kml +748 -0
- data/lib/kml/busstops-kml-294.kml +999 -0
- data/lib/kml/busstops-kml-295.kml +769 -0
- data/lib/kml/busstops-kml-296.kml +1051 -0
- data/lib/kml/busstops-kml-297.kml +904 -0
- data/lib/kml/busstops-kml-298.kml +731 -0
- data/lib/kml/busstops-kml-299.kml +644 -0
- data/lib/kml/busstops-kml-300.kml +274 -0
- data/lib/kml/busstops-kml-302.kml +156 -0
- data/lib/kml/busstops-kml-311.kml +179 -0
- data/lib/kml/busstops-kml-312.kml +455 -0
- data/lib/kml/busstops-kml-313.kml +639 -0
- data/lib/kml/busstops-kml-314.kml +639 -0
- data/lib/kml/busstops-kml-315.kml +708 -0
- data/lib/kml/busstops-kml-316.kml +394 -0
- data/lib/kml/busstops-kml-317.kml +363 -0
- data/lib/kml/busstops-kml-318.kml +830 -0
- data/lib/kml/busstops-kml-319.kml +370 -0
- data/lib/kml/busstops-kml-320.kml +560 -0
- data/lib/kml/busstops-kml-321.kml +432 -0
- data/lib/kml/busstops-kml-322.kml +365 -0
- data/lib/kml/busstops-kml-323.kml +529 -0
- data/lib/kml/busstops-kml-324.kml +549 -0
- data/lib/kml/busstops-kml-325.kml +717 -0
- data/lib/kml/busstops-kml-326.kml +645 -0
- data/lib/kml/busstops-kml-327.kml +908 -0
- data/lib/kml/busstops-kml-328.kml +467 -0
- data/lib/kml/busstops-kml-329.kml +876 -0
- data/lib/kml/busstops-kml-330.kml +795 -0
- data/lib/kml/busstops-kml-331.kml +442 -0
- data/lib/kml/busstops-kml-342.kml +271 -0
- data/lib/kml/busstops-kml-343.kml +547 -0
- data/lib/kml/busstops-kml-344.kml +317 -0
- data/lib/kml/busstops-kml-345.kml +557 -0
- data/lib/kml/busstops-kml-346.kml +777 -0
- data/lib/kml/busstops-kml-347.kml +777 -0
- data/lib/kml/busstops-kml-348.kml +762 -0
- data/lib/kml/busstops-kml-349.kml +668 -0
- data/lib/kml/busstops-kml-350.kml +366 -0
- data/lib/kml/busstops-kml-351.kml +301 -0
- data/lib/kml/busstops-kml-352.kml +367 -0
- data/lib/kml/busstops-kml-353.kml +271 -0
- data/lib/kml/busstops-kml-354.kml +225 -0
- data/lib/kml/busstops-kml-355.kml +611 -0
- data/lib/kml/busstops-kml-356.kml +842 -0
- data/lib/kml/busstops-kml-357.kml +838 -0
- data/lib/kml/busstops-kml-358.kml +808 -0
- data/lib/kml/busstops-kml-359.kml +786 -0
- data/lib/kml/busstops-kml-360.kml +680 -0
- data/lib/kml/busstops-kml-361.kml +785 -0
- data/lib/kml/busstops-kml-362.kml +815 -0
- data/lib/kml/busstops-kml-363.kml +389 -0
- data/lib/kml/busstops-kml-374.kml +432 -0
- data/lib/kml/busstops-kml-376.kml +205 -0
- data/lib/kml/busstops-kml-377.kml +889 -0
- data/lib/kml/busstops-kml-378.kml +936 -0
- data/lib/kml/busstops-kml-379.kml +577 -0
- data/lib/kml/busstops-kml-380.kml +794 -0
- data/lib/kml/busstops-kml-381.kml +619 -0
- data/lib/kml/busstops-kml-382.kml +716 -0
- data/lib/kml/busstops-kml-383.kml +204 -0
- data/lib/kml/busstops-kml-385.kml +271 -0
- data/lib/kml/busstops-kml-386.kml +795 -0
- data/lib/kml/busstops-kml-387.kml +875 -0
- data/lib/kml/busstops-kml-388.kml +598 -0
- data/lib/kml/busstops-kml-389.kml +648 -0
- data/lib/kml/busstops-kml-390.kml +297 -0
- data/lib/kml/busstops-kml-391.kml +519 -0
- data/lib/kml/busstops-kml-392.kml +426 -0
- data/lib/kml/busstops-kml-393.kml +959 -0
- data/lib/kml/busstops-kml-394.kml +250 -0
- data/lib/kml/busstops-kml-395.kml +187 -0
- data/lib/kml/busstops-kml-405.kml +248 -0
- data/lib/kml/busstops-kml-407.kml +277 -0
- data/lib/kml/busstops-kml-408.kml +670 -0
- data/lib/kml/busstops-kml-409.kml +1094 -0
- data/lib/kml/busstops-kml-410.kml +1009 -0
- data/lib/kml/busstops-kml-411.kml +880 -0
- data/lib/kml/busstops-kml-412.kml +988 -0
- data/lib/kml/busstops-kml-413.kml +396 -0
- data/lib/kml/busstops-kml-417.kml +615 -0
- data/lib/kml/busstops-kml-418.kml +869 -0
- data/lib/kml/busstops-kml-419.kml +1174 -0
- data/lib/kml/busstops-kml-420.kml +463 -0
- data/lib/kml/busstops-kml-421.kml +253 -0
- data/lib/kml/busstops-kml-422.kml +180 -0
- data/lib/kml/busstops-kml-423.kml +865 -0
- data/lib/kml/busstops-kml-424.kml +664 -0
- data/lib/kml/busstops-kml-425.kml +457 -0
- data/lib/kml/busstops-kml-426.kml +179 -0
- data/lib/kml/busstops-kml-438.kml +157 -0
- data/lib/kml/busstops-kml-439.kml +388 -0
- data/lib/kml/busstops-kml-440.kml +248 -0
- data/lib/kml/busstops-kml-441.kml +409 -0
- data/lib/kml/busstops-kml-442.kml +411 -0
- data/lib/kml/busstops-kml-443.kml +795 -0
- data/lib/kml/busstops-kml-444.kml +321 -0
- data/lib/kml/busstops-kml-447.kml +226 -0
- data/lib/kml/busstops-kml-448.kml +668 -0
- data/lib/kml/busstops-kml-449.kml +508 -0
- data/lib/kml/busstops-kml-450.kml +796 -0
- data/lib/kml/busstops-kml-451.kml +783 -0
- data/lib/kml/busstops-kml-452.kml +157 -0
- data/lib/kml/busstops-kml-454.kml +670 -0
- data/lib/kml/busstops-kml-455.kml +1211 -0
- data/lib/kml/busstops-kml-456.kml +496 -0
- data/lib/kml/busstops-kml-457.kml +220 -0
- data/lib/kml/busstops-kml-470.kml +248 -0
- data/lib/kml/busstops-kml-473.kml +434 -0
- data/lib/kml/busstops-kml-474.kml +433 -0
- data/lib/kml/busstops-kml-475.kml +405 -0
- data/lib/kml/busstops-kml-478.kml +271 -0
- data/lib/kml/busstops-kml-479.kml +780 -0
- data/lib/kml/busstops-kml-480.kml +604 -0
- data/lib/kml/busstops-kml-481.kml +676 -0
- data/lib/kml/busstops-kml-482.kml +603 -0
- data/lib/kml/busstops-kml-483.kml +501 -0
- data/lib/kml/busstops-kml-484.kml +179 -0
- data/lib/kml/busstops-kml-485.kml +317 -0
- data/lib/kml/busstops-kml-486.kml +460 -0
- data/lib/kml/busstops-kml-487.kml +887 -0
- data/lib/kml/busstops-kml-488.kml +210 -0
- data/lib/kml/busstops-kml-501.kml +455 -0
- data/lib/kml/busstops-kml-502.kml +317 -0
- data/lib/kml/busstops-kml-503.kml +317 -0
- data/lib/kml/busstops-kml-504.kml +411 -0
- data/lib/kml/busstops-kml-505.kml +461 -0
- data/lib/kml/busstops-kml-506.kml +544 -0
- data/lib/kml/busstops-kml-509.kml +256 -0
- data/lib/kml/busstops-kml-510.kml +869 -0
- data/lib/kml/busstops-kml-511.kml +1146 -0
- data/lib/kml/busstops-kml-512.kml +963 -0
- data/lib/kml/busstops-kml-513.kml +1307 -0
- data/lib/kml/busstops-kml-514.kml +437 -0
- data/lib/kml/busstops-kml-515.kml +363 -0
- data/lib/kml/busstops-kml-516.kml +599 -0
- data/lib/kml/busstops-kml-517.kml +1078 -0
- data/lib/kml/busstops-kml-518.kml +709 -0
- data/lib/kml/busstops-kml-519.kml +179 -0
- data/lib/kml/busstops-kml-520.kml +225 -0
- data/lib/kml/busstops-kml-532.kml +363 -0
- data/lib/kml/busstops-kml-534.kml +179 -0
- data/lib/kml/busstops-kml-535.kml +989 -0
- data/lib/kml/busstops-kml-536.kml +1196 -0
- data/lib/kml/busstops-kml-537.kml +631 -0
- data/lib/kml/busstops-kml-540.kml +346 -0
- data/lib/kml/busstops-kml-541.kml +984 -0
- data/lib/kml/busstops-kml-542.kml +256 -0
- data/lib/kml/busstops-kml-543.kml +496 -0
- data/lib/kml/busstops-kml-544.kml +855 -0
- data/lib/kml/busstops-kml-545.kml +612 -0
- data/lib/kml/busstops-kml-546.kml +225 -0
- data/lib/kml/busstops-kml-547.kml +645 -0
- data/lib/kml/busstops-kml-548.kml +363 -0
- data/lib/kml/busstops-kml-549.kml +386 -0
- data/lib/kml/busstops-kml-550.kml +225 -0
- data/lib/kml/busstops-kml-551.kml +271 -0
- data/lib/kml/busstops-kml-566.kml +436 -0
- data/lib/kml/busstops-kml-567.kml +461 -0
- data/lib/kml/busstops-kml-568.kml +253 -0
- data/lib/kml/busstops-kml-571.kml +241 -0
- data/lib/kml/busstops-kml-572.kml +630 -0
- data/lib/kml/busstops-kml-573.kml +430 -0
- data/lib/kml/busstops-kml-574.kml +625 -0
- data/lib/kml/busstops-kml-575.kml +1110 -0
- data/lib/kml/busstops-kml-576.kml +1082 -0
- data/lib/kml/busstops-kml-577.kml +205 -0
- data/lib/kml/busstops-kml-581.kml +735 -0
- data/lib/kml/busstops-kml-582.kml +248 -0
- data/lib/kml/busstops-kml-594.kml +179 -0
- data/lib/kml/busstops-kml-595.kml +179 -0
- data/lib/kml/busstops-kml-597.kml +436 -0
- data/lib/kml/busstops-kml-598.kml +458 -0
- data/lib/kml/busstops-kml-601.kml +179 -0
- data/lib/kml/busstops-kml-602.kml +389 -0
- data/lib/kml/busstops-kml-603.kml +157 -0
- data/lib/kml/busstops-kml-605.kml +456 -0
- data/lib/kml/busstops-kml-606.kml +298 -0
- data/lib/kml/busstops-kml-607.kml +792 -0
- data/lib/kml/busstops-kml-608.kml +463 -0
- data/lib/kml/busstops-kml-626.kml +248 -0
- data/lib/kml/busstops-kml-628.kml +157 -0
- data/lib/kml/busstops-kml-629.kml +501 -0
- data/lib/kml/busstops-kml-630.kml +340 -0
- data/lib/kml/busstops-kml-631.kml +249 -0
- data/lib/kml/busstops-kml-632.kml +202 -0
- data/lib/kml/busstops-kml-633.kml +319 -0
- data/lib/kml/busstops-kml-635.kml +225 -0
- data/lib/kml/busstops-kml-636.kml +317 -0
- data/lib/kml/busstops-kml-638.kml +667 -0
- data/lib/kml/busstops-kml-656.kml +156 -0
- data/lib/kml/busstops-kml-657.kml +271 -0
- data/lib/kml/busstops-kml-660.kml +432 -0
- data/lib/kml/busstops-kml-662.kml +227 -0
- data/lib/kml/busstops-kml-663.kml +271 -0
- data/lib/kml/busstops-kml-664.kml +202 -0
- data/lib/kml/busstops-kml-665.kml +718 -0
- data/lib/kml/busstops-kml-666.kml +179 -0
- data/lib/kml/busstops-kml-667.kml +206 -0
- data/lib/kml/busstops-kml-669.kml +225 -0
- data/lib/kml/busstops-kml-688.kml +271 -0
- data/lib/kml/busstops-kml-690.kml +179 -0
- data/lib/kml/busstops-kml-691.kml +496 -0
- data/lib/kml/busstops-kml-692.kml +179 -0
- data/lib/kml/busstops-kml-693.kml +271 -0
- data/lib/kml/busstops-kml-695.kml +363 -0
- data/lib/kml/busstops-kml-696.kml +842 -0
- data/lib/kml/busstops-kml-697.kml +265 -0
- data/lib/kml/busstops-kml-698.kml +179 -0
- data/lib/kml/busstops-kml-700.kml +156 -0
- data/lib/kml/busstops-kml-719.kml +294 -0
- data/lib/kml/busstops-kml-721.kml +319 -0
- data/lib/kml/busstops-kml-722.kml +460 -0
- data/lib/kml/busstops-kml-723.kml +843 -0
- data/lib/kml/busstops-kml-724.kml +989 -0
- data/lib/kml/busstops-kml-725.kml +297 -0
- data/lib/kml/busstops-kml-726.kml +447 -0
- data/lib/kml/busstops-kml-727.kml +942 -0
- data/lib/kml/busstops-kml-728.kml +179 -0
- data/lib/kml/busstops-kml-75.kml +156 -0
- data/lib/kml/busstops-kml-750.kml +271 -0
- data/lib/kml/busstops-kml-751.kml +225 -0
- data/lib/kml/busstops-kml-752.kml +271 -0
- data/lib/kml/busstops-kml-753.kml +180 -0
- data/lib/kml/busstops-kml-754.kml +887 -0
- data/lib/kml/busstops-kml-755.kml +1067 -0
- data/lib/kml/busstops-kml-756.kml +609 -0
- data/lib/kml/busstops-kml-757.kml +448 -0
- data/lib/kml/busstops-kml-758.kml +391 -0
- data/lib/kml/busstops-kml-785.kml +341 -0
- data/lib/kml/busstops-kml-786.kml +365 -0
- data/lib/kml/busstops-kml-787.kml +662 -0
- data/lib/kml/busstops-kml-788.kml +1180 -0
- data/lib/kml/busstops-kml-789.kml +180 -0
- data/lib/kml/busstops-kml-816.kml +179 -0
- data/lib/kml/busstops-kml-817.kml +179 -0
- data/lib/kml/busstops-kml-818.kml +478 -0
- data/lib/kml/busstops-kml-819.kml +604 -0
- data/lib/kml/busstops-kml-820.kml +318 -0
- data/lib/kml/busstops-kml-849.kml +503 -0
- data/lib/kml/busstops-kml-850.kml +157 -0
- data/lib/kml/busstops-kml-877.kml +156 -0
- data/lib/kml/busstops-kml-908.kml +156 -0
- data/lib/kml/busstops-kml-969.kml +156 -0
- data/lib/sbf.rb +6 -0
- data/lib/sbf/engine.rb +19 -0
- data/lib/sbf/version.rb +3 -0
- data/lib/tasks/sbf_tasks.rake +4 -0
- metadata +467 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
json.extract! @unit, :no, :price, :area, :flat_type, :block_id, :created_at, :updated_at
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# RailsAdmin config file. Generated on July 22, 2013 15:10
|
|
2
|
+
# See github.com/sferik/rails_admin for more informations
|
|
3
|
+
|
|
4
|
+
RailsAdmin.config do |config|
|
|
5
|
+
|
|
6
|
+
################ Global configuration ################
|
|
7
|
+
|
|
8
|
+
# Set the admin name here (optional second array element will appear in red). For example:
|
|
9
|
+
# config.main_app_name = ['Sbf2013', 'Admin']
|
|
10
|
+
# or for a more dynamic name:
|
|
11
|
+
# config.main_app_name = Proc.new { |controller| [Rails.application.engine_name.titleize, controller.params['action'].titleize] }
|
|
12
|
+
config.main_app_name = ['SBF', Rails.application.class.parent_name.split(/SBF/i).last.titleize]
|
|
13
|
+
# RailsAdmin may need a way to know who the current user is]
|
|
14
|
+
config.current_user_method {} # auto-generated
|
|
15
|
+
config.authenticate_with {}
|
|
16
|
+
config.authorize_with :cancan
|
|
17
|
+
|
|
18
|
+
# If you want to track changes on your models:
|
|
19
|
+
# config.audit_with :history, 'User'
|
|
20
|
+
|
|
21
|
+
# Or with a PaperTrail: (you need to install it first)
|
|
22
|
+
# config.audit_with :paper_trail, 'User'
|
|
23
|
+
|
|
24
|
+
# Display empty fields in show views:
|
|
25
|
+
config.compact_show_view = false
|
|
26
|
+
|
|
27
|
+
# Number of default rows per-page:
|
|
28
|
+
config.default_items_per_page = 50
|
|
29
|
+
|
|
30
|
+
# Exclude specific models (keep the others):
|
|
31
|
+
# config.excluded_models = ['Block', 'Estate', 'Unit']
|
|
32
|
+
|
|
33
|
+
# Include specific models (exclude the others):
|
|
34
|
+
# config.included_models = ['Block', 'Estate', 'Unit']
|
|
35
|
+
|
|
36
|
+
# Label methods for model instances:
|
|
37
|
+
# config.label_methods << :description # Default is [:name, :title]
|
|
38
|
+
|
|
39
|
+
# config.actions do
|
|
40
|
+
# index
|
|
41
|
+
# show
|
|
42
|
+
# update
|
|
43
|
+
# dashboard
|
|
44
|
+
# end
|
|
45
|
+
|
|
46
|
+
################ Model configuration ################
|
|
47
|
+
|
|
48
|
+
# Each model configuration can alternatively:
|
|
49
|
+
# - stay here in a `config.model 'ModelName' do ... end` block
|
|
50
|
+
# - go in the model definition file in a `rails_admin do ... end` block
|
|
51
|
+
|
|
52
|
+
# This is your choice to make:
|
|
53
|
+
# - This initializer is loaded once at startup (modifications will show up when restarting the application) but all RailsAdmin configuration would stay in one place.
|
|
54
|
+
# - Models are reloaded at each request in development mode (when modified), which may smooth your RailsAdmin development workflow.
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# Now you probably need to tour the wiki a bit: https://github.com/sferik/rails_admin/wiki
|
|
58
|
+
# Anyway, here is how RailsAdmin saw your application's models when you ran the initializer:
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
### Block ###
|
|
63
|
+
|
|
64
|
+
# config.model 'Block' do
|
|
65
|
+
|
|
66
|
+
# # You can copy this to a 'rails_admin do ... end' block inside your block.rb model definition
|
|
67
|
+
|
|
68
|
+
# # Found associations:
|
|
69
|
+
|
|
70
|
+
# configure :estate, :belongs_to_association
|
|
71
|
+
# configure :units, :has_many_association
|
|
72
|
+
|
|
73
|
+
# # Found columns:
|
|
74
|
+
|
|
75
|
+
# configure :id, :integer
|
|
76
|
+
# configure :no, :string
|
|
77
|
+
# configure :street, :string
|
|
78
|
+
# configure :probable_date, :string
|
|
79
|
+
# configure :delivery_date, :string
|
|
80
|
+
# configure :lease_start, :string
|
|
81
|
+
# configure :ethnic_quota, :string
|
|
82
|
+
# configure :created_at, :datetime
|
|
83
|
+
# configure :updated_at, :datetime
|
|
84
|
+
# configure :estate_id, :integer # Hidden
|
|
85
|
+
|
|
86
|
+
# # Cross-section configuration:
|
|
87
|
+
|
|
88
|
+
# # object_label_method :name # Name of the method called for pretty printing an *instance* of ModelName
|
|
89
|
+
# # label 'My model' # Name of ModelName (smartly defaults to ActiveRecord's I18n API)
|
|
90
|
+
# # label_plural 'My models' # Same, plural
|
|
91
|
+
# # weight 0 # Navigation priority. Bigger is higher.
|
|
92
|
+
# # parent OtherModel # Set parent model for navigation. MyModel will be nested below. OtherModel will be on first position of the dropdown
|
|
93
|
+
# # navigation_label # Sets dropdown entry's name in navigation. Only for parents!
|
|
94
|
+
|
|
95
|
+
# # Section specific configuration:
|
|
96
|
+
|
|
97
|
+
# list do
|
|
98
|
+
# # filters [:id, :name] # Array of field names which filters should be shown by default in the table header
|
|
99
|
+
# # items_per_page 100 # Override default_items_per_page
|
|
100
|
+
# # sort_by :id # Sort column (default is primary key)
|
|
101
|
+
# # sort_reverse true # Sort direction (default is true for primary key, last created first)
|
|
102
|
+
# end
|
|
103
|
+
# show do; end
|
|
104
|
+
# edit do; end
|
|
105
|
+
# export do; end
|
|
106
|
+
# # also see the create, update, modal and nested sections, which override edit in specific cases (resp. when creating, updating, modifying from another model in a popup modal or modifying from another model nested form)
|
|
107
|
+
# # you can override a cross-section field configuration in any section with the same syntax `configure :field_name do ... end`
|
|
108
|
+
# # using `field` instead of `configure` will exclude all other fields and force the ordering
|
|
109
|
+
# end
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
### Estate ###
|
|
113
|
+
|
|
114
|
+
# config.model 'Estate' do
|
|
115
|
+
|
|
116
|
+
# # You can copy this to a 'rails_admin do ... end' block inside your estate.rb model definition
|
|
117
|
+
|
|
118
|
+
# # Found associations:
|
|
119
|
+
|
|
120
|
+
# configure :blocks, :has_many_association
|
|
121
|
+
# configure :units, :has_many_association
|
|
122
|
+
|
|
123
|
+
# # Found columns:
|
|
124
|
+
|
|
125
|
+
# configure :id, :integer
|
|
126
|
+
# configure :name, :string
|
|
127
|
+
# configure :total, :integer
|
|
128
|
+
# configure :created_at, :datetime
|
|
129
|
+
# configure :updated_at, :datetime
|
|
130
|
+
|
|
131
|
+
# # Cross-section configuration:
|
|
132
|
+
|
|
133
|
+
# # object_label_method :name # Name of the method called for pretty printing an *instance* of ModelName
|
|
134
|
+
# # label 'My model' # Name of ModelName (smartly defaults to ActiveRecord's I18n API)
|
|
135
|
+
# # label_plural 'My models' # Same, plural
|
|
136
|
+
# # weight 0 # Navigation priority. Bigger is higher.
|
|
137
|
+
# # parent OtherModel # Set parent model for navigation. MyModel will be nested below. OtherModel will be on first position of the dropdown
|
|
138
|
+
# # navigation_label # Sets dropdown entry's name in navigation. Only for parents!
|
|
139
|
+
|
|
140
|
+
# # Section specific configuration:
|
|
141
|
+
|
|
142
|
+
# list do
|
|
143
|
+
# # filters [:id, :name] # Array of field names which filters should be shown by default in the table header
|
|
144
|
+
# # items_per_page 100 # Override default_items_per_page
|
|
145
|
+
# # sort_by :id # Sort column (default is primary key)
|
|
146
|
+
# # sort_reverse true # Sort direction (default is true for primary key, last created first)
|
|
147
|
+
# end
|
|
148
|
+
# show do; end
|
|
149
|
+
# edit do; end
|
|
150
|
+
# export do; end
|
|
151
|
+
# # also see the create, update, modal and nested sections, which override edit in specific cases (resp. when creating, updating, modifying from another model in a popup modal or modifying from another model nested form)
|
|
152
|
+
# # you can override a cross-section field configuration in any section with the same syntax `configure :field_name do ... end`
|
|
153
|
+
# # using `field` instead of `configure` will exclude all other fields and force the ordering
|
|
154
|
+
# end
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
### Unit ###
|
|
158
|
+
|
|
159
|
+
# config.model 'Unit' do
|
|
160
|
+
|
|
161
|
+
# # You can copy this to a 'rails_admin do ... end' block inside your unit.rb model definition
|
|
162
|
+
|
|
163
|
+
# # Found associations:
|
|
164
|
+
|
|
165
|
+
# configure :block, :belongs_to_association
|
|
166
|
+
|
|
167
|
+
# # Found columns:
|
|
168
|
+
|
|
169
|
+
# configure :id, :integer
|
|
170
|
+
# configure :no, :string
|
|
171
|
+
# configure :price, :string
|
|
172
|
+
# configure :area, :string
|
|
173
|
+
# configure :flat_type, :string
|
|
174
|
+
# configure :block_id, :integer # Hidden
|
|
175
|
+
# configure :created_at, :datetime
|
|
176
|
+
# configure :updated_at, :datetime
|
|
177
|
+
|
|
178
|
+
# # Cross-section configuration:
|
|
179
|
+
|
|
180
|
+
# # object_label_method :name # Name of the method called for pretty printing an *instance* of ModelName
|
|
181
|
+
# # label 'My model' # Name of ModelName (smartly defaults to ActiveRecord's I18n API)
|
|
182
|
+
# # label_plural 'My models' # Same, plural
|
|
183
|
+
# # weight 0 # Navigation priority. Bigger is higher.
|
|
184
|
+
# # parent OtherModel # Set parent model for navigation. MyModel will be nested below. OtherModel will be on first position of the dropdown
|
|
185
|
+
# # navigation_label # Sets dropdown entry's name in navigation. Only for parents!
|
|
186
|
+
|
|
187
|
+
# # Section specific configuration:
|
|
188
|
+
|
|
189
|
+
# list do
|
|
190
|
+
# # filters [:id, :name] # Array of field names which filters should be shown by default in the table header
|
|
191
|
+
# # items_per_page 100 # Override default_items_per_page
|
|
192
|
+
# # sort_by :id # Sort column (default is primary key)
|
|
193
|
+
# # sort_reverse true # Sort direction (default is true for primary key, last created first)
|
|
194
|
+
# end
|
|
195
|
+
# show do; end
|
|
196
|
+
# edit do; end
|
|
197
|
+
# export do; end
|
|
198
|
+
# # also see the create, update, modal and nested sections, which override edit in specific cases (resp. when creating, updating, modifying from another model in a popup modal or modifying from another model nested form)
|
|
199
|
+
# # you can override a cross-section field configuration in any section with the same syntax `configure :field_name do ... end`
|
|
200
|
+
# # using `field` instead of `configure` will exclude all other fields and force the ordering
|
|
201
|
+
# end
|
|
202
|
+
|
|
203
|
+
end
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class CreateBlocks < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :blocks do |t|
|
|
4
|
+
t.string :no, null: false
|
|
5
|
+
t.string :street, null: false
|
|
6
|
+
t.string :estate, null: false
|
|
7
|
+
t.string :probable_date
|
|
8
|
+
t.string :delivery_date, null: false
|
|
9
|
+
t.string :lease_start, null: false
|
|
10
|
+
t.string :ethnic_quota, null: false
|
|
11
|
+
|
|
12
|
+
t.timestamps
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
add_index :blocks, [:no, :street], unique: true
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class CreateUnits < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :units do |t|
|
|
4
|
+
t.string :no, null: false
|
|
5
|
+
t.string :price, null: false
|
|
6
|
+
t.string :area, null: false
|
|
7
|
+
t.string :flat_type, null: false
|
|
8
|
+
t.references :block, index: true, null: false
|
|
9
|
+
|
|
10
|
+
t.timestamps
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
add_index :units, [:no, :block_id], unique: true
|
|
14
|
+
add_index :units, :flat_type
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class UpdateEstateIdForBlocks < ActiveRecord::Migration
|
|
2
|
+
def up
|
|
3
|
+
Estate.all.each do |e|
|
|
4
|
+
Block.where(estate: e.name).each { |r| r.update_attribute(:estate_id, e.id) }
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def down
|
|
9
|
+
Estate.all.each do |e|
|
|
10
|
+
Block.where(estate_id: e.id).each { |r| r.update_attribute(:estate, e.name) }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
class FixNumericColumns < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
reversible do |dir|
|
|
4
|
+
dir.up do
|
|
5
|
+
rename_column :units, :price, :price_str
|
|
6
|
+
rename_column :units, :area, :area_str
|
|
7
|
+
add_column :units, :price, :integer, null: false
|
|
8
|
+
add_column :units, :area, :integer, null: false
|
|
9
|
+
|
|
10
|
+
Unit.all.each do |u|
|
|
11
|
+
u.update_attributes({
|
|
12
|
+
price: u.price_str.gsub(/\D/,'').to_i,
|
|
13
|
+
area: u.area_str.gsub(/\D/,'').to_i
|
|
14
|
+
}, :without_protection => true)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
remove_column :units, :price_str, :string
|
|
18
|
+
remove_column :units, :area_str, :string
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
dir.down do
|
|
22
|
+
add_column :units, :price_str, :string, null: false
|
|
23
|
+
add_column :units, :area_str, :string, null: false
|
|
24
|
+
|
|
25
|
+
Unit.all.each do |u|
|
|
26
|
+
u.update_attributes({
|
|
27
|
+
price_str: u.price.to_s,
|
|
28
|
+
area_str: u.area.to_s
|
|
29
|
+
}, :without_protection => true)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
remove_column :units, :price, :integer
|
|
33
|
+
remove_column :units, :area, :integer
|
|
34
|
+
rename_column :units, :price_str, :price
|
|
35
|
+
rename_column :units, :area_str, :area
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class CreateQuota < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :quota do |t|
|
|
4
|
+
t.string :flat_type, null: false
|
|
5
|
+
t.integer :malay, null: false
|
|
6
|
+
t.integer :chinese, null: false
|
|
7
|
+
t.integer :others, null: false
|
|
8
|
+
t.references :block, index: true, null: false
|
|
9
|
+
|
|
10
|
+
t.timestamps
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
add_index :quota, [:flat_type, :block_id], unique: true
|
|
14
|
+
add_reference :units, :quota, index: true, null: false
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class PopulateQuotaTable < ActiveRecord::Migration
|
|
2
|
+
def up
|
|
3
|
+
quota_fields = ['malay','chinese','others','flat_type','block_id']
|
|
4
|
+
|
|
5
|
+
def parse_quota(quota_str)
|
|
6
|
+
r = quota_str.match /(\d+)\D+(\d+)\D+(\d+)/
|
|
7
|
+
r[1..3].map(&:to_i)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# for checking the affected blocks and flat types:
|
|
11
|
+
# r3 = Block.joins(:units).joins(:estate)
|
|
12
|
+
# .select([:flat_type,'blocks.no',:street,:name,'count(distinct flat_type) as total'])
|
|
13
|
+
# .group(['blocks.no',:street,:name])
|
|
14
|
+
# .having('count(distinct flat_type) > 1')
|
|
15
|
+
# .order(['estates.name','units.flat_type','blocks.no',:street])
|
|
16
|
+
|
|
17
|
+
blocks = Block.joins(:units).select('*') #.select('blocks.id',:street,'blocks.no',:flat_type,:ethnic_quota).distinct
|
|
18
|
+
blocks.each do |block|
|
|
19
|
+
next if Quota.where(flat_type: block.flat_type, block_id: block.block_id).first
|
|
20
|
+
|
|
21
|
+
quota_info = parse_quota(block.ethnic_quota) << block.flat_type << block.block_id
|
|
22
|
+
quota_hash = Hash[quota_fields.zip(quota_info)]
|
|
23
|
+
|
|
24
|
+
puts quota_hash
|
|
25
|
+
|
|
26
|
+
quota = Quota.where(quota_hash).first_or_create
|
|
27
|
+
units = Unit.where(block_id: block.block_id, flat_type: block.flat_type)
|
|
28
|
+
units.update_all(['quota_id = ?', quota.id])
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def down
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
data/db/schema.rb
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# This file is auto-generated from the current state of the database. Instead
|
|
3
|
+
# of editing this file, please use the migrations feature of Active Record to
|
|
4
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
|
5
|
+
#
|
|
6
|
+
# Note that this schema.rb definition is the authoritative source for your
|
|
7
|
+
# database schema. If you need to create the application database on another
|
|
8
|
+
# system, you should be using db:schema:load, not running all the migrations
|
|
9
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
|
10
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
|
11
|
+
#
|
|
12
|
+
# It's strongly recommended that you check this file into your version control system.
|
|
13
|
+
|
|
14
|
+
ActiveRecord::Schema.define(version: 20130912181314) do
|
|
15
|
+
|
|
16
|
+
create_table "blocks", force: true do |t|
|
|
17
|
+
t.string "no", null: false
|
|
18
|
+
t.string "street", null: false
|
|
19
|
+
t.string "probable_date"
|
|
20
|
+
t.string "delivery_date", null: false
|
|
21
|
+
t.string "lease_start", null: false
|
|
22
|
+
t.datetime "created_at"
|
|
23
|
+
t.datetime "updated_at"
|
|
24
|
+
t.integer "estate_id", null: false
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
add_index "blocks", ["estate_id"], name: "index_blocks_on_estate_id", using: :btree
|
|
28
|
+
add_index "blocks", ["no", "street"], name: "index_blocks_on_no_and_street", unique: true, using: :btree
|
|
29
|
+
|
|
30
|
+
create_table "estates", force: true do |t|
|
|
31
|
+
t.string "name", null: false
|
|
32
|
+
t.integer "total", null: false
|
|
33
|
+
t.datetime "created_at"
|
|
34
|
+
t.datetime "updated_at"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
add_index "estates", ["name"], name: "index_estates_on_name", unique: true, using: :btree
|
|
38
|
+
|
|
39
|
+
create_table "quota", force: true do |t|
|
|
40
|
+
t.string "flat_type", null: false
|
|
41
|
+
t.integer "malay", null: false
|
|
42
|
+
t.integer "chinese", null: false
|
|
43
|
+
t.integer "others", null: false
|
|
44
|
+
t.integer "block_id", null: false
|
|
45
|
+
t.datetime "created_at"
|
|
46
|
+
t.datetime "updated_at"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
add_index "quota", ["block_id"], name: "index_quota_on_block_id", using: :btree
|
|
50
|
+
add_index "quota", ["flat_type", "block_id"], name: "index_quota_on_flat_type_and_block_id", unique: true, using: :btree
|
|
51
|
+
|
|
52
|
+
create_table "units", force: true do |t|
|
|
53
|
+
t.string "no", null: false
|
|
54
|
+
t.string "flat_type", null: false
|
|
55
|
+
t.integer "block_id", null: false
|
|
56
|
+
t.datetime "created_at"
|
|
57
|
+
t.datetime "updated_at"
|
|
58
|
+
t.integer "price", null: false
|
|
59
|
+
t.integer "area", null: false
|
|
60
|
+
t.integer "quota_id", null: false
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
add_index "units", ["block_id"], name: "index_units_on_block_id", using: :btree
|
|
64
|
+
add_index "units", ["flat_type"], name: "index_units_on_flat_type", using: :btree
|
|
65
|
+
add_index "units", ["no", "block_id"], name: "index_units_on_no_and_block_id", unique: true, using: :btree
|
|
66
|
+
add_index "units", ["quota_id"], name: "index_units_on_quota_id", using: :btree
|
|
67
|
+
|
|
68
|
+
end
|