hyper_admin 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/hyper_admin/angularjs/config.js.coffee +12 -0
  3. data/app/assets/javascripts/hyper_admin/angularjs/controllers/edit_ctrl.js.coffee +5 -0
  4. data/app/assets/javascripts/hyper_admin/angularjs/controllers/form_ctrl.js.coffee +40 -0
  5. data/app/assets/javascripts/hyper_admin/angularjs/controllers/index_ctrl.js.coffee +7 -0
  6. data/app/assets/javascripts/hyper_admin/angularjs/controllers/main_ctrl.js.coffee +3 -0
  7. data/app/assets/javascripts/hyper_admin/angularjs/controllers/navbar_ctrl.js.coffee +8 -0
  8. data/app/assets/javascripts/hyper_admin/angularjs/controllers/new_ctrl.js.coffee +5 -0
  9. data/app/assets/javascripts/hyper_admin/angularjs/controllers/show_ctrl.js.coffee +9 -0
  10. data/app/assets/javascripts/hyper_admin/angularjs/directives/delete_link.js.coffee +8 -0
  11. data/app/assets/javascripts/hyper_admin/angularjs/directives/flash_messages.js.coffee +11 -0
  12. data/app/assets/javascripts/hyper_admin/angularjs/directives/form/form_actions.js.coffee +16 -0
  13. data/app/assets/javascripts/hyper_admin/angularjs/directives/form/form_errors.js.coffee +22 -0
  14. data/app/assets/javascripts/hyper_admin/angularjs/directives/form/form_input.js.coffee +18 -0
  15. data/app/assets/javascripts/hyper_admin/angularjs/directives/form/form_input_group.js.coffee +23 -0
  16. data/app/assets/javascripts/hyper_admin/angularjs/directives/form/resource_form.js.coffee +27 -0
  17. data/app/assets/javascripts/hyper_admin/angularjs/directives/page_header.js.coffee +12 -0
  18. data/app/assets/javascripts/hyper_admin/angularjs/directives/table/resource_table.js.coffee +23 -0
  19. data/app/assets/javascripts/hyper_admin/angularjs/directives/table/table_row.js.coffee +18 -0
  20. data/app/assets/javascripts/hyper_admin/angularjs/filters/truncate.js.coffee +8 -0
  21. data/app/assets/javascripts/hyper_admin/angularjs/services/flash.js.coffee +15 -0
  22. data/app/assets/javascripts/hyper_admin/angularjs/states.js.coffee +37 -0
  23. data/app/assets/javascripts/hyper_admin/application.js.coffee +8 -0
  24. data/app/assets/stylesheets/hyper_admin/application.css.sass +1 -0
  25. data/app/assets/stylesheets/hyper_admin/forms.css.sass +19 -0
  26. data/app/controllers/hyper_admin/application_controller.rb +0 -8
  27. data/app/controllers/hyper_admin/resource_classes_controller.rb +20 -0
  28. data/app/controllers/hyper_admin/resource_controller.rb +21 -13
  29. data/app/views/admin/resources/_form.html.erb +34 -26
  30. data/app/views/admin/resources/_resource.json.jbuilder +3 -0
  31. data/app/views/admin/resources/edit.html.erb +7 -8
  32. data/app/views/admin/resources/index.html.erb +49 -38
  33. data/app/views/admin/resources/index.json.jbuilder +3 -0
  34. data/app/views/admin/resources/new.html.erb +7 -8
  35. data/app/views/admin/resources/show.html.erb +50 -15
  36. data/app/views/admin/resources/show.json.jbuilder +1 -0
  37. data/app/views/hyper_admin/resource_classes/index.json.jbuilder +23 -0
  38. data/app/views/hyper_admin/resource_classes/show.json.jbuilder +21 -0
  39. data/app/views/layouts/hyper_admin/application.html.erb +13 -9
  40. data/config/routes.rb +1 -0
  41. data/lib/hyper_admin/version.rb +1 -1
  42. data/lib/hyper_admin.rb +2 -0
  43. data/spec/dummy/app/models/person.rb +3 -0
  44. data/spec/dummy/config/locales/en.yml +4 -0
  45. data/spec/dummy/config/routes.rb +2 -0
  46. data/spec/dummy/db/development.sqlite3 +0 -0
  47. data/spec/dummy/db/migrate/20140916195117_add_published_at_to_articles.rb +5 -0
  48. data/spec/dummy/db/migrate/20140916210918_add_email_to_people.rb +5 -0
  49. data/spec/dummy/db/migrate/20140916211114_add_url_to_people.rb +5 -0
  50. data/spec/dummy/db/migrate/20140916211657_add_birthday_to_people.rb +5 -0
  51. data/spec/dummy/db/schema.rb +5 -1
  52. data/spec/dummy/log/development.log +15339 -0
  53. data/spec/dummy/log/test.log +33 -0
  54. data/spec/dummy/tmp/cache/assets/development/sprockets/01924c706dd1b7de217f342099dcfa3f +0 -0
  55. data/spec/dummy/tmp/cache/assets/development/sprockets/06f8c2a573a416251bf5e507d716a2e1 +0 -0
  56. data/spec/dummy/tmp/cache/assets/development/sprockets/0f187a2ccdd305e6d153597ecd00bf3b +0 -0
  57. data/spec/dummy/tmp/cache/assets/development/sprockets/125ec787290ff1586c163c0ca12ba62f +0 -0
  58. data/spec/dummy/tmp/cache/assets/development/sprockets/129ae300cd13764786ea4b5704c0503c +0 -0
  59. data/spec/dummy/tmp/cache/assets/development/sprockets/1390e33dca626e5abb05f08e99b336ef +0 -0
  60. data/spec/dummy/tmp/cache/assets/development/sprockets/182fae6bb2ded49fb9e1a2fb6b0ed5be +0 -0
  61. data/spec/dummy/tmp/cache/assets/development/sprockets/1a17fb3abd9919e28b6af53bad5cfcd6 +0 -0
  62. data/spec/dummy/tmp/cache/assets/development/sprockets/1f2d024064a1603f3d45f322414e3eb6 +0 -0
  63. data/spec/dummy/tmp/cache/assets/development/sprockets/1f9d2e324ff8491fae3c73ad41e07c94 +0 -0
  64. data/spec/dummy/tmp/cache/assets/development/sprockets/20533c55869299ed9aa5b4c019517dc8 +0 -0
  65. data/spec/dummy/tmp/cache/assets/development/sprockets/210dc54df072ff8aa801be4a5cfaa52c +0 -0
  66. data/spec/dummy/tmp/cache/assets/development/sprockets/21f2070c3edc32aeeb85d9ce4f9f84de +0 -0
  67. data/spec/dummy/tmp/cache/assets/development/sprockets/22282a54aa58df7a70e3177452e4013a +0 -0
  68. data/spec/dummy/tmp/cache/assets/development/sprockets/233eb26722587b9bedfea4efdb95844d +0 -0
  69. data/spec/dummy/tmp/cache/assets/development/sprockets/246cd7d124c2b5c489c92ff0c1db047d +0 -0
  70. data/spec/dummy/tmp/cache/assets/development/sprockets/265e1b8b1f67b586e82cf68693d6000b +0 -0
  71. data/spec/dummy/tmp/cache/assets/development/sprockets/283aabf8eaa95b30342ac59ec1fa1313 +0 -0
  72. data/spec/dummy/tmp/cache/assets/development/sprockets/2aa9269bc07919114bffba5e9c919561 +0 -0
  73. data/spec/dummy/tmp/cache/assets/development/sprockets/2b9b2182b16b5a4c3c5d1560df5de0d0 +0 -0
  74. data/spec/dummy/tmp/cache/assets/development/sprockets/30a5c1dbe092e168fe430bbb41f374de +0 -0
  75. data/spec/dummy/tmp/cache/assets/development/sprockets/31e25d39e4c17797d201e2a4243efb4a +0 -0
  76. data/spec/dummy/tmp/cache/assets/development/sprockets/3359accba5cc1fb307a5afbefc314c99 +0 -0
  77. data/spec/dummy/tmp/cache/assets/development/sprockets/36b7ac26ce8d497f663785ede3b1069e +0 -0
  78. data/spec/dummy/tmp/cache/assets/development/sprockets/36e5b3d779b93cb69f60386bbc521bc0 +0 -0
  79. data/spec/dummy/tmp/cache/assets/development/sprockets/3a89445fd816e24e5e7c863fdc42b675 +0 -0
  80. data/spec/dummy/tmp/cache/assets/development/sprockets/3d8764a7279799826e72bb55e4fafe26 +0 -0
  81. data/spec/dummy/tmp/cache/assets/development/sprockets/3dfce56bcf85a8a70d6306eace2b2e0e +0 -0
  82. data/spec/dummy/tmp/cache/assets/development/sprockets/3fc47eb10fa7224c92423534c9671a23 +0 -0
  83. data/spec/dummy/tmp/cache/assets/development/sprockets/4143364cc108fcecd6281314d82d47f4 +0 -0
  84. data/spec/dummy/tmp/cache/assets/development/sprockets/41bb46727f2d6c961f664ec0bab005af +0 -0
  85. data/spec/dummy/tmp/cache/assets/development/sprockets/45f0889ff048a64505d5206b7b33ead1 +0 -0
  86. data/spec/dummy/tmp/cache/assets/development/sprockets/481acac6eeb5c92456356785e900be1a +0 -0
  87. data/spec/dummy/tmp/cache/assets/development/sprockets/4878081f8996c1f15bfba3f2a2180992 +0 -0
  88. data/spec/dummy/tmp/cache/assets/development/sprockets/49437706323ed3c6250b7e6b2d4ca84a +0 -0
  89. data/spec/dummy/tmp/cache/assets/development/sprockets/4cc704d7bdd419b79bf65609f24a8ca0 +0 -0
  90. data/spec/dummy/tmp/cache/assets/development/sprockets/5817d714b843218e26feb1bbf2c64a4a +0 -0
  91. data/spec/dummy/tmp/cache/assets/development/sprockets/5d2d334072610a8b33f89e1c1e3b09f1 +0 -0
  92. data/spec/dummy/tmp/cache/assets/development/sprockets/5dda74c0c8b6f1468aae30b26a2de87c +0 -0
  93. data/spec/dummy/tmp/cache/assets/development/sprockets/5e0bb4ec4d880a8d13aa3fb4f56f8dba +0 -0
  94. data/spec/dummy/tmp/cache/assets/development/sprockets/62f93a3bdbe098f4c6d495ad2a2a9e54 +0 -0
  95. data/spec/dummy/tmp/cache/assets/development/sprockets/6b2211be110fb2e55b3c112d41e62a67 +0 -0
  96. data/spec/dummy/tmp/cache/assets/development/sprockets/750defd195c7e34d0b8ff410451e164f +0 -0
  97. data/spec/dummy/tmp/cache/assets/development/sprockets/76db8861208428afff99184b4b87410a +0 -0
  98. data/spec/dummy/tmp/cache/assets/development/sprockets/835213f339beaa129e265d17814d92a9 +0 -0
  99. data/spec/dummy/tmp/cache/assets/development/sprockets/83a638f9944e25db78590de89d9f6580 +0 -0
  100. data/spec/dummy/tmp/cache/assets/development/sprockets/86709205fe01b8340285e06f0f7b9540 +0 -0
  101. data/spec/dummy/tmp/cache/assets/development/sprockets/875cfb30bea588bd29ea187083a02927 +0 -0
  102. data/spec/dummy/tmp/cache/assets/development/sprockets/888680ef9887d508fb9f94d306e58986 +0 -0
  103. data/spec/dummy/tmp/cache/assets/development/sprockets/8a3a1ff827df47a7a8d90a7c41e1549f +0 -0
  104. data/spec/dummy/tmp/cache/assets/development/sprockets/8bed64fba8987e05b7883ec69b84e0b5 +0 -0
  105. data/spec/dummy/tmp/cache/assets/development/sprockets/8fce096622774700a53e0bae363c3931 +0 -0
  106. data/spec/dummy/tmp/cache/assets/development/sprockets/91a5cc4a6166e54d588c8decf774d04a +0 -0
  107. data/spec/dummy/tmp/cache/assets/development/sprockets/944445ca0183d48b09ab52f3813a7a73 +0 -0
  108. data/spec/dummy/tmp/cache/assets/development/sprockets/97a00ae9511caadbf68d011ce54d94ca +0 -0
  109. data/spec/dummy/tmp/cache/assets/development/sprockets/99d492ff5654a4d4b238047d3ced9aa9 +0 -0
  110. data/spec/dummy/tmp/cache/assets/development/sprockets/a1f1fbb9115cf49e86ee8970633e5e7d +0 -0
  111. data/spec/dummy/tmp/cache/assets/development/sprockets/a4531dc856fbec90e4252b3a137cf4fc +0 -0
  112. data/spec/dummy/tmp/cache/assets/development/sprockets/a48ddcfaeabb844016847600a68b0af8 +0 -0
  113. data/spec/dummy/tmp/cache/assets/development/sprockets/a4ccfc66938b201e326831a8c5e4a9b9 +0 -0
  114. data/spec/dummy/tmp/cache/assets/development/sprockets/a965b3ea15d855c3a8c0de0455af861f +0 -0
  115. data/spec/dummy/tmp/cache/assets/development/sprockets/aef10572991d4451e1b77f3ac122d412 +0 -0
  116. data/spec/dummy/tmp/cache/assets/development/sprockets/af31e93a907aa085f33777d42ceceb60 +0 -0
  117. data/spec/dummy/tmp/cache/assets/development/sprockets/afc1c0672e1d6450e3e2c57bbf813de3 +0 -0
  118. data/spec/dummy/tmp/cache/assets/development/sprockets/b9b1856b9db2caaf2e6b4721a86f57d1 +0 -0
  119. data/spec/dummy/tmp/cache/assets/development/sprockets/ba1b9d5a702585ba02b445cbd4f16080 +0 -0
  120. data/spec/dummy/tmp/cache/assets/development/sprockets/bcc36a6e918ec179b87ca0e8d7ac18c5 +0 -0
  121. data/spec/dummy/tmp/cache/assets/development/sprockets/c189bdd96d738128a78ee47e7ed0ca6f +0 -0
  122. data/spec/dummy/tmp/cache/assets/development/sprockets/c27cec6ddeaab0cafd2edbb61e975a95 +0 -0
  123. data/spec/dummy/tmp/cache/assets/development/sprockets/c397f6c9af946760da8841ad05bd4431 +0 -0
  124. data/spec/dummy/tmp/cache/assets/development/sprockets/c671831af9e7e1c6da2f589673c74a6a +0 -0
  125. data/spec/dummy/tmp/cache/assets/development/sprockets/c8730a8220ec89fcf6bb2da7a0f35093 +0 -0
  126. data/spec/dummy/tmp/cache/assets/development/sprockets/cca5ad888c966eeff6b735ed1e55a312 +0 -0
  127. data/spec/dummy/tmp/cache/assets/development/sprockets/d07cbf1d8a0b4b975a59fc017fa29563 +0 -0
  128. data/spec/dummy/tmp/cache/assets/development/sprockets/d397eeece764eeb57c641034f1210be2 +0 -0
  129. data/spec/dummy/tmp/cache/assets/development/sprockets/d4c163fff15a22af5c6e8b63146a2c0b +0 -0
  130. data/spec/dummy/tmp/cache/assets/development/sprockets/d583bba6e1d2c1b41726702d299dd494 +0 -0
  131. data/spec/dummy/tmp/cache/assets/development/sprockets/d7e55f83763944bcc50de5ab23764387 +0 -0
  132. data/spec/dummy/tmp/cache/assets/development/sprockets/d8bd2a2fe67a4fcb7001f1fd53912993 +0 -0
  133. data/spec/dummy/tmp/cache/assets/development/sprockets/dd0e90d5366ba2c0b614457be5afeca2 +0 -0
  134. data/spec/dummy/tmp/cache/assets/development/sprockets/dfbcee5c2f1bc9fc50f9216a0dbce852 +0 -0
  135. data/spec/dummy/tmp/cache/assets/development/sprockets/e166d873a957ea113040c9008439bc30 +0 -0
  136. data/spec/dummy/tmp/cache/assets/development/sprockets/e2907d6b7bc4cb7aba7f283117d15eac +0 -0
  137. data/spec/dummy/tmp/cache/assets/development/sprockets/e7c2a37a322afa44ecd67fccbeffd209 +0 -0
  138. data/spec/dummy/tmp/cache/assets/development/sprockets/e815f671a8bcf1e651eed8dee00eba51 +0 -0
  139. data/spec/dummy/tmp/cache/assets/development/sprockets/e8cac11b7c752cd692b94d83732f4183 +0 -0
  140. data/spec/dummy/tmp/cache/assets/development/sprockets/e9d1c32abde1f876bdef211286c31bf1 +0 -0
  141. data/spec/dummy/tmp/cache/assets/development/sprockets/ebf7e75ff6dd6735ef46a63b0da89668 +0 -0
  142. data/spec/dummy/tmp/cache/assets/development/sprockets/ed3843275b21843a93d01c48c1502c4c +0 -0
  143. data/spec/dummy/tmp/cache/assets/development/sprockets/ee7aee67b689b4238ffc9b404b41dc38 +0 -0
  144. data/spec/dummy/tmp/cache/assets/development/sprockets/f0524602f5c3e166c46feca6e8895d8b +0 -0
  145. data/spec/dummy/tmp/cache/assets/development/sprockets/f0d2b5185b8f10dfc7e41f8c4f379fab +0 -0
  146. data/spec/dummy/tmp/cache/assets/development/sprockets/f50ffee7d1224de2e536e55a94b4b324 +0 -0
  147. data/spec/dummy/tmp/cache/assets/development/sprockets/f8118ba169e2aa16e9a6cc1f0df9b732 +0 -0
  148. data/spec/dummy/tmp/cache/assets/development/sprockets/fcb835765a4145484827b05fcb69812b +0 -0
  149. data/spec/dummy/tmp/cache/assets/development/sprockets/fce44b243bccba1345556e2fb7b0f8ad +0 -0
  150. data/spec/dummy/tmp/pids/server.pid +1 -0
  151. metadata +133 -7
  152. data/app/assets/javascripts/hyper_admin/application.js +0 -2
  153. data/app/assets/stylesheets/hyper_admin/application.css +0 -0
@@ -1,39 +1,50 @@
1
- <div class="row">
2
- <div class="col-xs-12">
3
- <header class="page-header">
4
- <div class="pull-right">
5
- <%= link_to "Create new",[ :new, :admin, @resource_class.model_name.singular_route_key ], class: "btn btn-lg btn-success" %>
6
- </div>
7
- <h1>All <%= @resource_class.model_name.plural %></h1>
8
- </header>
9
- </div>
10
- </div>
11
-
12
- <div class="row">
13
- <div class="col-xs-12">
14
- <table class="table table-striped">
15
- <thead>
16
- <tr>
17
- <% @resource_class.attribute_names.each do |attr| %>
18
- <th><%= @resource_class.human_attribute_name attr %></th>
19
- <% end %>
20
- <th>&nbsp;</th>
21
- </tr>
22
- </thead>
23
- <tbody>
24
- <% @resources.each do |resource| %>
25
- <tr>
26
- <% resource.attributes.values.each do |attr| %>
27
- <td><%= attr %></th>
28
- <% end %>
29
- <td>
30
- <%= link_to "Show", [ :admin, resource ] %>
31
- <%= link_to "Edit", [ :edit, :admin, resource ] %>
32
- <%= link_to "Destroy", [ :admin, resource ], method: :delete %>
33
- </td>
34
- </tr>
35
- <% end %>
36
- </tbody>
37
- </table>
1
+ <ui-view>
2
+ <page-header>
3
+ <div class="pull-right">
4
+ <a class="btn btn-lg btn-success" ui-sref=".new">
5
+ Create new
6
+ </a>
7
+ </div>
8
+ <h1>All {{ indexCtrl.resource_class.plural }}</h1>
9
+ </page-header>
10
+
11
+ <div class="row">
12
+ <div class="col-xs-12">
13
+ <resource-table resource-class="indexCtrl.resource_class"
14
+ resources="indexCtrl.resources">
15
+ </resource-table>
16
+ </div>
38
17
  </div>
39
- </div>
18
+ </ui-view>
19
+
20
+ <script type="text/ng-template" id="table-date">
21
+ {{ resource[attribute.key] | date }}
22
+ </script>
23
+
24
+ <script type="text/ng-template" id="table-datetime">
25
+ {{ resource[attribute.key] | date:'medium' }}
26
+ </script>
27
+
28
+ <script type="text/ng-template" id="table-email">
29
+ <a href="mailto:{{ resource[attribute.key] }}">
30
+ {{ resource[attribute.key] }}
31
+ </a>
32
+ </script>
33
+
34
+ <script type="text/ng-template" id="table-integer">
35
+ {{ resource[attribute.key] }}
36
+ </script>
37
+
38
+ <script type="text/ng-template" id="table-string">
39
+ {{ resource[attribute.key] | truncate }}
40
+ </script>
41
+
42
+ <script type="text/ng-template" id="table-text">
43
+ {{ resource[attribute.key] | truncate }}
44
+ </script>
45
+
46
+ <script type="text/ng-template" id="table-url">
47
+ <a href="{{ resource[attribute.key] }}" target="_blank">
48
+ {{ resource[attribute.key] | truncate }}
49
+ </a>
50
+ </script>
@@ -0,0 +1,3 @@
1
+ json.array! @resources do |resource|
2
+ json.partial! 'admin/resources/resource', resource: resource
3
+ end
@@ -1,9 +1,8 @@
1
- <div class="row">
2
- <div class="col-xs-12">
3
- <header class="page-header">
4
- <h1>New <%= @resource_class.model_name.singular %></h1>
5
- </header>
6
- </div>
7
- </div>
1
+ <page-header>
2
+ <h1>New {{ newCtrl.resource_class.singular }}</h1>
3
+ </page-header>
8
4
 
9
- <%= render "admin/resources/form", resource_class: @resource_class, resource: @resource %>
5
+ <resource-form resource-class="newCtrl.resource_class">
6
+ </resource-form>
7
+
8
+ <%= render "admin/resources/form" %>
@@ -1,25 +1,60 @@
1
- <div class="row">
2
- <div class="col-xs-12">
3
- <header class="page-header">
4
- <div class="pull-right">
5
- <%= link_to "Edit", [ :edit, :admin, @resource ], class: "btn btn-lg btn-default" %>
6
- <%= link_to "Destroy", [ :admin, @resource ], class: "btn btn-lg btn-danger", method: :delete %>
7
- </div>
8
-
9
- <h1><%= @resource.to_s %></h1>
10
- </header>
1
+ <page-header>
2
+ <div class="pull-right">
3
+ <a class="btn btn-lg btn-default" ui-sref="^.edit({ id: showCtrl.resource.id })">
4
+ Edit
5
+ </a>
6
+ <a class="btn btn-lg btn-danger" ui-sref="^.show({ id: showCtrl.resource.id })" delete-link>
7
+ Destroy
8
+ </a>
11
9
  </div>
12
- </div>
10
+
11
+ <h1>{{ showCtrl.resource_class.singular_human }} #{{ showCtrl.resource.id }}</h1>
12
+ </page-header>
13
13
 
14
14
  <div class="row">
15
15
  <div class="col-xs-12">
16
16
  <div class="well">
17
17
  <dl class="dl-horizontal">
18
- <% @resource.attributes.each do |key, value| %>
19
- <dt><%= @resource_class.human_attribute_name key %></dt>
20
- <dd><%= value %></dd>
21
- <% end %>
18
+ <dt ng-repeat-start="attribute in showCtrl.resource_class.attributes">
19
+ {{ attribute.human }}
20
+ </dt>
21
+ <dd ng-repeat-end>
22
+ <ng-include src="showCtrl.template(attribute)"></ng-include>
23
+ </dd>
22
24
  </dl>
23
25
  </div>
24
26
  </div>
25
27
  </div>
28
+
29
+ <script type="text/ng-template" id="show-date">
30
+ {{ showCtrl.resource[attribute.key] | date:'longDate' }}
31
+ </script>
32
+
33
+ <script type="text/ng-template" id="show-datetime">
34
+ {{ showCtrl.resource[attribute.key] | date:'longDate' }}
35
+ {{ showCtrl.resource[attribute.key] | date:'mediumTime' }}
36
+ </script>
37
+
38
+ <script type="text/ng-template" id="show-email">
39
+ <a href="mailto:{{ showCtrl.resource[attribute.key] }}">
40
+ {{ showCtrl.resource[attribute.key] }}
41
+ </a>
42
+ </script>
43
+
44
+ <script type="text/ng-template" id="show-integer">
45
+ {{ showCtrl.resource[attribute.key] }}
46
+ </script>
47
+
48
+ <script type="text/ng-template" id="show-string">
49
+ {{ showCtrl.resource[attribute.key] }}
50
+ </script>
51
+
52
+ <script type="text/ng-template" id="show-text">
53
+ {{ showCtrl.resource[attribute.key] }}
54
+ </script>
55
+
56
+ <script type="text/ng-template" id="show-url">
57
+ <a href="{{ showCtrl.resource[attribute.key] }}" target="_blank">
58
+ {{ showCtrl.resource[attribute.key] }}
59
+ </a>
60
+ </script>
@@ -0,0 +1 @@
1
+ json.partial! 'admin/resources/resource', resource: @resource
@@ -0,0 +1,23 @@
1
+ def infer_type_from_attribute(resource_class, attribute)
2
+ return :email if attribute == "email"
3
+ return :url if attribute == "url"
4
+
5
+ resource_class.columns_hash[attribute].type
6
+ end
7
+
8
+ json.array! @resource_classes do |resource_class|
9
+ json.menu_label resource_class.model_name.human(count: 2)
10
+ json.singular resource_class.model_name.singular
11
+ json.singular_human resource_class.model_name.human(count: 1)
12
+ json.plural resource_class.model_name.plural
13
+ json.plural_human resource_class.model_name.human(count: 2)
14
+
15
+ attributes = resource_class.attribute_names.map do |attr|
16
+ {
17
+ key: attr,
18
+ human: resource_class.human_attribute_name(attr),
19
+ type: infer_type_from_attribute(resource_class, attr)
20
+ }
21
+ end
22
+ json.attributes attributes
23
+ end
@@ -0,0 +1,21 @@
1
+ def infer_type_from_attribute(resource_class, attribute)
2
+ return :email if attribute == "email"
3
+ return :url if attribute == "url"
4
+
5
+ resource_class.columns_hash[attribute].type
6
+ end
7
+
8
+ json.menu_label @resource_class.model_name.human(count: 2)
9
+ json.singular @resource_class.model_name.singular
10
+ json.singular_human @resource_class.model_name.human(count: 1)
11
+ json.plural @resource_class.model_name.plural
12
+ json.plural_human @resource_class.model_name.human(count: 2)
13
+
14
+ attributes = @resource_class.attribute_names.map do |attr|
15
+ {
16
+ key: attr,
17
+ human: @resource_class.human_attribute_name(attr),
18
+ type: infer_type_from_attribute(@resource_class, attr)
19
+ }
20
+ end
21
+ json.attributes attributes
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <html>
2
+ <html ng-app="hyperadmin">
3
3
  <head>
4
4
  <title>HyperAdmin</title>
5
5
 
@@ -9,26 +9,30 @@
9
9
 
10
10
  <%= csrf_meta_tags %>
11
11
  </head>
12
- <body>
12
+ <body ng-controller="MainCtrl as mainCtrl">
13
13
 
14
- <nav class="navbar navbar-default">
14
+ <nav class="navbar navbar-default" ng-controller="NavbarCtrl as navbarCtrl">
15
15
  <div class="container-fluid">
16
16
  <div class="navbar-header">
17
17
  <a class="navbar-brand" href="/admin">Admin</a>
18
18
 
19
19
  <ul class="nav navbar-nav">
20
- <% @resource_classes.each do |resource_class| %>
21
- <li class="<%= "active" if params[:controller] == "admin/#{resource_class.model_name.plural}" %>">
22
- <%= link_to resource_class.model_name.human(count: 2), [ :admin, resource_class ] %>
23
- </li>
24
- <% end %>
20
+ <li ng-repeat="resource in navbarCtrl.resources" ui-sref-active="active">
21
+ <a ui-sref="index({ pluralName: resource.list_state })">{{ resource.label }}</a>
22
+ </li>
25
23
  </ul>
26
24
  </div>
27
25
  </div>
28
26
  </nav>
29
27
 
30
28
  <div class="container-fluid">
31
- <%= yield %>
29
+ <div class="row">
30
+ <div class="col-xs-12">
31
+ <flash-messages></flash-messages>
32
+ </div>
33
+ </div>
34
+
35
+ <ui-view></ui-view>
32
36
  </div>
33
37
 
34
38
  </body>
data/config/routes.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  HyperAdmin::Engine.routes.draw do
2
+ resources :resource_classes, only: %i(index show)
2
3
  end
@@ -1,3 +1,3 @@
1
1
  module HyperAdmin
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/hyper_admin.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'angularjs-rails'
2
+ require 'jbuilder'
1
3
  require 'jquery-rails'
2
4
 
3
5
  require 'hyper_admin/engine'
@@ -1,2 +1,5 @@
1
1
  class Person < ActiveRecord::Base
2
+ def to_s
3
+ [ first_name, last_name ].compact.join " "
4
+ end
2
5
  end
@@ -42,8 +42,12 @@ en:
42
42
  <<: *common
43
43
  title: Title
44
44
  body: Body text
45
+ published_at: Publication date
45
46
 
46
47
  person:
47
48
  <<: *common
48
49
  first_name: First name
49
50
  last_name: Last name
51
+ email: E-mail address
52
+ url: Website
53
+ birthday: Date of birth
@@ -1,3 +1,5 @@
1
1
  Rails.application.routes.draw do
2
2
  HyperAdmin.routes self
3
+
4
+ mount HyperAdmin::Engine, at: '/admin'
3
5
  end
Binary file
@@ -0,0 +1,5 @@
1
+ class AddPublishedAtToArticles < ActiveRecord::Migration
2
+ def change
3
+ add_column :articles, :published_at, :datetime
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddEmailToPeople < ActiveRecord::Migration
2
+ def change
3
+ add_column :people, :email, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddUrlToPeople < ActiveRecord::Migration
2
+ def change
3
+ add_column :people, :url, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddBirthdayToPeople < ActiveRecord::Migration
2
+ def change
3
+ add_column :people, :birthday, :date
4
+ end
5
+ end
@@ -11,13 +11,14 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20140826220715) do
14
+ ActiveRecord::Schema.define(version: 20140916211657) do
15
15
 
16
16
  create_table "articles", force: true do |t|
17
17
  t.string "title"
18
18
  t.text "body"
19
19
  t.datetime "created_at"
20
20
  t.datetime "updated_at"
21
+ t.datetime "published_at"
21
22
  end
22
23
 
23
24
  create_table "people", force: true do |t|
@@ -25,6 +26,9 @@ ActiveRecord::Schema.define(version: 20140826220715) do
25
26
  t.string "last_name"
26
27
  t.datetime "created_at"
27
28
  t.datetime "updated_at"
29
+ t.string "email"
30
+ t.string "url"
31
+ t.date "birthday"
28
32
  end
29
33
 
30
34
  end