ng_on_rails 0.0.3 → 0.0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f212d2b4cb8e37f88d4c87d993abfaeadafc60e
4
- data.tar.gz: 0703fa143da3d32eabfcafdfddba2651b4bd746a
3
+ metadata.gz: 9cf65bbace77206f0ab8dd0945f239d1a2bb2617
4
+ data.tar.gz: 2954f08cd74e244f60c302ae6895415391dbb7f4
5
5
  SHA512:
6
- metadata.gz: c7e067cfaf1f72ae1e6dba5a1c8962051641c54970517ec4d18c644e184902333648f05a18f05212b17e6ba07c9ce706dc33b49b467e92bbbc4271ed82ba6ad6
7
- data.tar.gz: a74e9a03945024bc090581f3ed9e7a00f571447f9d78bc55c7294fd5e287c4a3c1f2fda190b3ffe537af8dbc883d25abbf8b690ca169714a9fcc611126aceddc
6
+ metadata.gz: 00798198b11443ce8b6d67c172176166532b49f29cbac5c660ff0a4c221334c5034ae8612b1ca93ee0fc888a4ea665e593b85555412e2fb9c0b841bfa93f7762
7
+ data.tar.gz: 11618b116368700a91aaa7cb53c7f1805188977526d0b4e09f2d8211b99e2466a0eb942f8625878cf937b05be72b88961546043e09ef3f7f07a65d49ee4971df
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ##### *This project is still in developement and uses MIT-LICENSE.*
1
+ ##### *This project is in active developement. MIT-LICENSE.*
2
2
 
3
3
  -----------------------------------------------------------
4
4
 
@@ -8,10 +8,7 @@
8
8
 
9
9
  The main motivations behind this gem is to standardize and simplify how AngularJS is integrated in a rails application.
10
10
 
11
- I am just getting started but this does function *as-is*. Some things left to do:
12
- * Write more specs!!!
13
- * (Create generators for views?)
14
- * (ViewHelper functions via shared service?)
11
+ This project is in active development. Check back often for updates and be very careful when using with any production app.
15
12
 
16
13
  ### Install it!
17
14
  ```
@@ -66,6 +63,67 @@ You are now up and running! To generate controllers and resource-services use Ng
66
63
  # Assuming the Rails app has a "Page" model:
67
64
  $ bundle exec rails g ng_on_rails:controller Page
68
65
  $ bundle exec rails g ng_on_rails:resource Page
66
+ $ bundle exec rails g ng_on_rails:views Page
67
+ ```
68
+ `ng_on_rails:controller` has one option, `[--belongs-to=one two three] # list of models it belongs_to` setting this option will ensure that belongs to relationships are set in the "rest.new()" and "rest.edit()" methods
69
+
70
+
71
+ `ng_on_rails:views` has many options:
72
+ ```
73
+ $ bundle exec rails g ng_on_rails:views --help
74
+ Usage:
75
+ rails generate ng_on_rails:views MODEL_NAME [options]
76
+
77
+ Options:
78
+ [--properties=one two three] # list of properties
79
+ [--relationships=one two three] # list of relationships. determines has_many/one from singular/plural name
80
+ [--format=FORMAT] # *** FOR NOW ONLY OFFERS SLIM*** templating engine. defaults to slim. slim, haml, erb
81
+ # Default: slim
82
+ [--render-views], [--no-render-views] # Insert render_view directives into rails-views
83
+ # Default: true
84
+ [--styles], [--no-styles] # add ng_on_rails_styles.css
85
+ # Default: true
86
+ [--belongs-to=one two three] # list of models it belongs_to
87
+ ```
88
+ * `--properties` is a list of properties you want in the views. A property looks like `property_name:property_type{opt1+opt2+...}`.
89
+ * property\_name: (required) name of the property
90
+ * property\_type: (optional) number/textarea -- default empty
91
+ * opt-list: (optional) seperate options by "+". the allowed values are:
92
+ * required: make the property required in the form
93
+ * skip_form: do not include in the form
94
+ * skip_index: do not include in the index table row
95
+ * link: link this property in index table to the show view
96
+
97
+ A typical example might look like this
98
+ ```
99
+ bundle exec rails g ng_on_rails:views Doc --properties id:number{skip_form+link} name{required} description:textarea{skip_index}
100
+ ```
101
+ * `--format, --styles` should be self explanatory.
102
+ * `--render-views=true` will append (creating file if necessary) code to load the angular views to your index and show views in your views directory. For example, your index files becomes:
103
+ ```slim
104
+ # your_app/app/views/docs/index.html.slim
105
+
106
+ ... your content ...
107
+
108
+ /
109
+ / Inserted by NgOnRails view generator.
110
+ /
111
+ div ng-init="docs=ctrl.rails.docs" render_view="true" url="docs/index"
112
+ /
113
+ /
114
+ /
115
+ ```
116
+ * `--belongs_to` same as for ng\_on\_rails:controller generator [include the index view of the related model(s) on the show page]
117
+
118
+ ##### Test App
119
+ The [test_app](https://github.com/brookisme/ng_on_rails/tree/master/spec/test_app) serves as an example of how to set up a project. With one minor alteration the test app was generated with the following commands:
120
+ ```
121
+ $ bundle exec rails g ng_on_rails:resource Doc
122
+ $ bundle exec rails g ng_on_rails:controller Doc
123
+ $ bundle exec rails g ng_on_rails:views Doc --properties id:number{skip_form+link} name{required} description:textarea{skip_index} --relationships pages
124
+ $ bundle exec rails g ng_on_rails:resource Page
125
+ $ bundle exec rails g ng_on_rails:controller Page --belongs_to Doc
126
+ $ bundle exec rails g ng_on_rails:views Page --properties id:number{skip_form+link} order_index:number subject{required} body:textarea{skip_index} --belongs_to Doc
69
127
  ```
70
128
 
71
129
  ##### Service: Rails
@@ -0,0 +1,35 @@
1
+
2
+ #
3
+ # NgOnRails: Render Directives
4
+ #
5
+
6
+ NgOnRailsApp.directive "renderView", ->
7
+ restrict: "AE",
8
+ transclude: true,
9
+ template: (el,attrs)->
10
+ format = attrs.format || "html"
11
+ '<div ng_include="\'/angular_app/'+attrs.url+'.'+format+'\'"></div>'
12
+
13
+ NgOnRailsApp.directive "render", ->
14
+ restrict: "AE",
15
+ transclude: true,
16
+ template: (el,attrs)->
17
+ format = attrs.format || "html"
18
+ url_parts = attrs.url.split("/")
19
+ if (url_parts[url_parts.length-1].trim()=="")
20
+ url_parts.pop()
21
+ last = url_parts.pop()
22
+ url_parts.push("_"+last)
23
+ path = url_parts.join("/")
24
+ '<div ng_include="\'/angular_app/'+path+'.'+format+'\'"></div>'
25
+
26
+
27
+ #
28
+ # NgOnRails: View Helper Directives
29
+ #
30
+
31
+ NgOnRailsApp.directive "confirm", ->
32
+ link: (scope, el, attrs)->
33
+ msg = attrs.confirm || "Are you sure?"
34
+ el.bind 'click', ->
35
+ scope.$eval(attrs.action) if window.confirm(msg)
@@ -2,6 +2,7 @@ require 'rails/generators'
2
2
  module NgOnRails
3
3
  class ControllerGenerator < Rails::Generators::NamedBase
4
4
  desc "Creates NgOnRails-style AngularJS Controller"
5
+ class_option :belongs_to, type: :array, required: false, default: [], desc: "list of models it belongs_to"
5
6
 
6
7
  def self.source_root
7
8
  @source_root ||= File.join(File.dirname(__FILE__), 'templates')
@@ -10,5 +11,23 @@ module NgOnRails
10
11
  def generate_layout
11
12
  template "#{ControllerGenerator.source_root}/controller_template.js.erb", "app/assets/javascripts/angular_app/controllers/#{plural_name}_controller.js.coffee"
12
13
  end
14
+
15
+ private
16
+
17
+ def belongs_to_array
18
+ if options[:belongs_to].blank?
19
+ []
20
+ else
21
+ options[:belongs_to].map do |a|
22
+ a.underscore.gsub(" ","")+"_id"
23
+ end
24
+ end
25
+ end
26
+
27
+ def belongs_to_parameters
28
+ unless options[:belongs_to].blank?
29
+ belongs_to_array.join(",")
30
+ end
31
+ end
13
32
  end
14
33
  end
@@ -29,10 +29,16 @@ NgOnRailsApp.controller '<%="#{class_name.pluralize}"%>Controller', ($scope,<%="
29
29
  <%="#{class_name}"%>.get({id: <%="#{file_name}"%>_id}).$promise.then (<%="#{file_name}"%>) ->
30
30
  ctrl.data.<%="#{file_name}"%> = <%="#{file_name}"%>
31
31
 
32
- new: ()->
32
+ new: (<%=belongs_to_parameters%>)->
33
33
  ctrl.clear()
34
34
  ctrl.data.active<%="#{class_name}"%> = {}
35
35
  ctrl.data.creating_new_<%="#{file_name}"%> = true
36
+ <%
37
+ belongs_to_array.each do |relationship|
38
+ %>ctrl.data.active<%="#{class_name}"%>.<%= relationship%> = <%= relationship %>
39
+ <%
40
+ end
41
+ %>
36
42
 
37
43
  create: ->
38
44
  if !(ctrl.locked || ctrl.<%="#{file_name}"%>_form.$error.required)
@@ -52,10 +58,17 @@ NgOnRailsApp.controller '<%="#{class_name.pluralize}"%>Controller', ($scope,<%="
52
58
  ctrl.locked = false
53
59
  )
54
60
 
55
- edit: (<%="#{file_name}"%>) ->
61
+ edit: (<%="#{file_name}"%>,<%=belongs_to_parameters%>) ->
56
62
  ctrl.clear()
57
63
  ctrl.data.active<%="#{class_name}"%> = <%="#{file_name}"%>
58
64
  ctrl.data.editing_<%="#{file_name}"%> = true
65
+ <%="#{file_name}"%>.is_displayed = false
66
+ <%
67
+ belongs_to_array.each do |relationship|
68
+ %>ctrl.data.active<%="#{class_name}"%>.<%= relationship%> = <%= relationship %>
69
+ <%
70
+ end
71
+ %>
59
72
 
60
73
  update: (<%="#{file_name}"%>)->
61
74
  if !(ctrl.locked || ctrl.<%="#{file_name}"%>_form.$error.required)
@@ -79,7 +92,10 @@ NgOnRailsApp.controller '<%="#{class_name.pluralize}"%>Controller', ($scope,<%="
79
92
  <%="#{file_name}"%>,
80
93
  (<%="#{file_name}"%>)->
81
94
  <%="#{plural_name}"%> ||= ctrl.data.<%="#{plural_name}"%>
82
- <%="#{plural_name}"%>.splice(index,1)
95
+ if !!<%="#{plural_name}"%>
96
+ <%="#{plural_name}"%>.splice(index,1)
97
+ else
98
+ window.location.href = '/<%="#{plural_name}"%>'
83
99
  ,
84
100
  (error)->
85
101
  console.log("delete_error:",error)
@@ -90,7 +106,7 @@ NgOnRailsApp.controller '<%="#{class_name.pluralize}"%>Controller', ($scope,<%="
90
106
  #
91
107
  # SCOPE METHODS
92
108
  #
93
- ctrl.clear = ->
109
+ ctrl.clear = (doc)->
94
110
  ctrl.data.active<%="#{class_name}"%> = null
95
111
  ctrl.data.creating_new_<%="#{file_name}"%> = false
96
112
  ctrl.data.editing_<%="#{file_name}"%> = false
@@ -99,6 +115,8 @@ NgOnRailsApp.controller '<%="#{class_name.pluralize}"%>Controller', ($scope,<%="
99
115
  (ctrl.data.editing_<%="#{file_name}"%> && !!<%="#{file_name}"%> && <%="#{file_name}"%>.id == ctrl.data.active<%="#{class_name}"%>.id) ||
100
116
  (ctrl.data.creating_new_<%="#{file_name}"%> && !<%="#{file_name}"%>)
101
117
 
118
+ ctrl.toggleDisplay = (<%="#{file_name}"%>)->
119
+ <%="#{file_name}"%>.is_displayed = !<%="#{file_name}"%>.is_displayed
102
120
 
103
121
  #
104
122
  # PRIVATE METHODS
@@ -0,0 +1,107 @@
1
+ .wrapper {
2
+ margin: 25px;
3
+ }
4
+ i.fa {
5
+ color: #ccc;
6
+ }
7
+ i.fa.light,
8
+ .light {
9
+ color: #aaa;
10
+ }
11
+ i.fa.white,
12
+ .white {
13
+ color: #fff;
14
+ }
15
+ i.fa.success,
16
+ .success {
17
+ color: #5cb85c;
18
+ }
19
+ i.fa.danger,
20
+ .error,
21
+ .danger {
22
+ color: #d9534f;
23
+ }
24
+ .error {
25
+ font-size: 11px;
26
+ font-weight: bold;
27
+ text-transform: uppercase;
28
+ }
29
+ i span.ilabel {
30
+ font-size: 14px;
31
+ margin-left: 5px;
32
+ position: relative;
33
+ top: -2px;
34
+ font-style: normal;
35
+ }
36
+ .property-label {
37
+ color: #069;
38
+ font-size: 12px;
39
+ font-weight: bold;
40
+ text-transform: uppercase;
41
+ }
42
+
43
+ /** DIV Tables **/
44
+
45
+ .div-table {
46
+ border: 1px solid #ccc;
47
+ }
48
+ .div-table .tr-collection:first-child {
49
+ border-top: 1px dotted #ccc;
50
+ }
51
+ .div-table .th,
52
+ .div-table .tr {
53
+ border-bottom: 1px dotted #ccc;
54
+ padding: 5px;
55
+ }
56
+ .div-table .th {
57
+ font-size: 11px;
58
+ font-weight: bold;
59
+ color: #069;
60
+ background-color: #eee;
61
+ }
62
+ .div-table .td {
63
+ display: inline-block;
64
+ margin-right: 5px;
65
+ padding-right: 5px;
66
+ width: 250px;
67
+ }
68
+ .div-table .td-collection {
69
+ display: inline-block;
70
+ }
71
+ .div-table .tr:hover {
72
+ background: #fff;
73
+ border-bottom: 1px solid #ccc;
74
+ }
75
+ .div-table {
76
+ margin: 25px 0;
77
+ }
78
+ .div-table .td.id,
79
+ .div-table .td.number {
80
+ width: 75px;
81
+ text-align: center;
82
+ }
83
+ .div-table .td.btn-group {
84
+ width: 300px;
85
+ }
86
+ .tr.quick-view {
87
+ padding: 20px 5px;
88
+ }
89
+
90
+
91
+ /* FORMS */
92
+ .form-inline input {
93
+ margin-left: 2px;
94
+ }
95
+ input.form-control.medium {
96
+ width: 200px;
97
+ }
98
+ input[type="number"],
99
+ input[type="number"].form-control {
100
+ width: 70px;
101
+ }
102
+ form span.error {
103
+ margin-left: 15px;
104
+ }
105
+ .list_label {
106
+ display: inline-block;
107
+ }
@@ -0,0 +1,33 @@
1
+ form.form name="ctrl.<%= resource_name %>_form" role="form" ng-show="ctrl.is_editing(<%= resource_name %>)"
2
+ .form-group
3
+ .btn-group
4
+ button.btn.btn-default ng-if="ctrl.data.creating_new_<%= resource_name %>" type="submit" ng-click="ctrl.rest.create()"
5
+ i.fa.fa-check.success
6
+ span.ilabel create
7
+ button.btn.btn-default ng-if="ctrl.data.editing_<%= resource_name %>" type="submit" ng-click="ctrl.rest.update()"
8
+ i.fa.fa-check.success
9
+ span.ilabel update
10
+ button.btn-default.btn ng-click="ctrl.clear(<%= resource_name %>)"
11
+ i.fa.fa-remove.danger
12
+ span.ilabel cancel
13
+
14
+ <% options[:properties].each do |property| %>
15
+ <% property_hash = args(property) %>
16
+ <% unless property_hash[:skip_form] %>
17
+ .form-group.<%= property_hash[:name] %><%= type_to_class(property_hash[:type]) %>
18
+ label.sr-only <%= property_hash[:name] %>:
19
+ <%
20
+ type_string = "type=\"#{property_hash[:type]}\"" unless property_hash[:type].blank?
21
+ if property_hash[:type]=="textarea"%>textarea.form-control<%= type_to_class(property_hash[:type])
22
+ %> name='<%= property_hash[:name] %>' <%= required_string(property_hash) %> ng-model="ctrl.data.active<%= class_name %>.<%= property_hash[:name] %>" placeholder="<%= property_hash[:name] %>"<%
23
+ else
24
+ %>input.form-control<%= type_to_class(property_hash[:type]) %> <%=type_string%> name='<%= property_hash[:name] %>' <%= required_string(property_hash) %> ng-model="ctrl.data.active<%= class_name %>.<%= property_hash[:name] %>" placeholder="<%= property_hash[:name] %>"<%
25
+ end
26
+ %>
27
+ <%
28
+ if property_hash[:required]
29
+ %>span.error ng-show="ctrl.<%= resource_name %>_form.name.$error.required" Required!<%
30
+ end
31
+ %>
32
+ <% end %>
33
+ <% end %>
@@ -0,0 +1,37 @@
1
+ .tr
2
+ <%
3
+ options[:properties].each do |property|
4
+ property_hash = args(property)
5
+ unless property_hash[:skip_index]
6
+ @name_rep ||= property_hash[:name]
7
+ if property_hash[:link]
8
+ %>.td.<%= property_hash[:name] %><%= type_to_class(property_hash[:type]) %>
9
+ a href="/<%= plural_name %>/{{<%= resource_name %>.id}}"
10
+ span ng-bind="<%= resource_name %>.<%= property_hash[:name] %>"
11
+ <%
12
+ else
13
+ %>.td.<%= property_hash[:name] %><%= type_to_class(property_hash[:type]) %>
14
+ span ng-bind="<%= resource_name %>.<%= property_hash[:name] %>"
15
+ <% end
16
+ end
17
+ end
18
+ %>
19
+ .td.btn-group
20
+ button.btn.btn-default ng-click="ctrl.toggleDisplay(<%= resource_name %>)"
21
+ i.fa.fa-plus-square-o.fa-lg ng-hide="<%= resource_name %>.displaying_<%= resource_name %>"
22
+ span.ilabel show
23
+ i.fa.fa-minus-square-o.fa-lg ng-show="<%= resource_name %>.displaying_<%= resource_name %>"
24
+ span.ilabel hide
25
+ button.btn.btn-default ng-click="ctrl.rest.edit(<%= resource_name %>,<%= resource_name %>.id)"
26
+ i.fa.fa-edit.fa-lg
27
+ span.ilabel edit
28
+ button.btn.btn-default confirm="Do you really want to delete <%= resource_name %>: '{{<%= resource_name %>.<%=@name_rep %>}}'?" action="ctrl.rest.delete($index,<%= resource_name %>)"
29
+ i.fa.fa-remove.fa-lg.danger
30
+ span.ilabel delete
31
+ .tr.quick-view ng-show='<%= resource_name %>.is_displayed'
32
+ .td
33
+ div render="true" url="<%= plural_name %>/show"
34
+
35
+ .tr.quick-view ng-show='ctrl.is_editing(<%= resource_name %>)'
36
+ .td
37
+ div render="true" url="<%= plural_name %>/form"
@@ -0,0 +1,9 @@
1
+ <%
2
+ options[:properties].each do |property|
3
+ property_hash = args(property)
4
+ %>
5
+ .property-label.<%= property_hash[:name] %><%= type_to_class(property_hash[:type]) %> <%= property_hash[:name] %>:
6
+ div ng-bind="<%= resource_name %>.<%= property_hash[:name] %>"
7
+ <%
8
+ end
9
+ %>
@@ -0,0 +1,15 @@
1
+ div ng_controller="<%= class_name.pluralize %>Controller as ctrl" ng-init="ctrl.set<%= class_name.pluralize %>(<%= plural_name %>)"
2
+ h3 <%=class_name.pluralize%>
3
+ button.btn.btn-default ng-hide="ctrl.data.creating_new_<%= resource_name %>" ng-click="ctrl.rest.new(<%= belongs_to_values %>)" new
4
+ div render="true" url="<%= plural_name %>/form"
5
+ .div-table
6
+ .th<%
7
+ options[:properties].each do |property|
8
+ property_hash = args(property)
9
+ unless property_hash[:skip_index]
10
+ %>
11
+ .td.<%= property_hash[:name] %><%= type_to_class(property_hash[:type]) %> <%= property_hash[:name] %><%
12
+ end
13
+ end
14
+ %>
15
+ .tr-collection ng-repeat="<%= resource_name %> in ctrl.data.<%= plural_name %>" render="true" url="<%= plural_name %>/<%= resource_name %>"
@@ -0,0 +1,35 @@
1
+ div ng_controller="<%= class_name.pluralize %>Controller as ctrl" ng-init="ctrl.set<%= class_name.pluralize %>(<%= plural_name %>,<%= resource_name %>)"
2
+ h3
3
+ | <%= class_name %>: &nbsp;
4
+ <%
5
+ options[:properties].each do |property|
6
+ property_hash = args(property)
7
+ @name_rep ||= property_hash[:name]
8
+ %>
9
+ .property-label.<%= property_hash[:name] %><%= type_to_class(property_hash[:type]) %> <%= property_hash[:name] %>:
10
+ div ng-bind="<%= resource_name %>.<%= property_hash[:name] %>"
11
+ <%
12
+ end
13
+ %>
14
+ button.btn.btn-default ng-click="ctrl.rest.edit(<%= resource_name %><%= belongs_to_comma %><%= belongs_to_values %>)"
15
+ i.fa.fa-edit.fa-lg
16
+ span.ilabel edit
17
+ button.btn.btn-default confirm="Do you really want to delete <%= resource_name %>: '{{<%= resource_name %>.<%=@name_rep %>}}'?" action="ctrl.rest.delete($index,<%= resource_name %>)"
18
+ i.fa.fa-remove.fa-lg.danger
19
+ span.ilabel delete
20
+
21
+ .formbox ng-show='ctrl.is_editing(<%= resource_name %>)'
22
+ div render="true" url="<%= plural_name %>/form"
23
+
24
+ <%
25
+ options[:relationships].each do |relationship|
26
+ if is_plural?(relationship)
27
+ relationship_page = "index"
28
+ else
29
+ relationship_page = "show"
30
+ end
31
+ %>
32
+ div render_view="true" url="<%= relationship.pluralize %>/<%= relationship_page %>" ng-init="<%= relationship %>=<%= resource_name %>.<%= relationship %>"
33
+ <%
34
+ end
35
+ %>
@@ -0,0 +1,211 @@
1
+ require 'rails/generators'
2
+ module NgOnRails
3
+ class ViewsGenerator < Rails::Generators::Base
4
+ desc "Creates NgOnRails-style AngularJS Views"
5
+
6
+ # arguments
7
+ argument :model_name, type: :string, required: true, desc: "required"
8
+ class_option :properties, type: :array, required: false, default: [], desc: "list of properties"
9
+ class_option :relationships, type: :array, required: false, default: [], desc: "list of relationships. determines has_many/one from singular/plural name"
10
+ class_option :format, type: :string, required: false, default: "slim", desc: "*** FOR NOW ONLY OFFERS SLIM*** templating engine. defaults to slim. slim, haml, erb"
11
+ class_option :render_views, type: :boolean, required: false, default: true, desc: "Insert render_view directives into rails-views"
12
+ class_option :styles, type: :boolean, required: false, default: true, desc: "add ng_on_rails_styles.css"
13
+ class_option :belongs_to, type: :array, required: false, default: [], desc: "list of models it belongs_to"
14
+
15
+ def self.source_root
16
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
17
+ end
18
+
19
+ def generate_layout
20
+ template "#{ViewsGenerator.source_root}/views/#{options[:format]}/index.html.erb",
21
+ "app/views/angular_app/#{plural_name}/index.html.#{options[:format]}"
22
+ template "#{ViewsGenerator.source_root}/views/#{options[:format]}/show.html.erb",
23
+ "app/views/angular_app/#{plural_name}/show.html.#{options[:format]}"
24
+ template "#{ViewsGenerator.source_root}/views/#{options[:format]}/_show.html.erb",
25
+ "app/views/angular_app/#{plural_name}/_show.html.#{options[:format]}"
26
+ template "#{ViewsGenerator.source_root}/views/#{options[:format]}/_form.html.erb",
27
+ "app/views/angular_app/#{plural_name}/_form.html.#{options[:format]}"
28
+ template "#{ViewsGenerator.source_root}/views/#{options[:format]}/_model.html.erb",
29
+ "app/views/angular_app/#{plural_name}/_#{resource_name}.html.#{options[:format]}"
30
+ end
31
+
32
+ def create_render_views_files
33
+ if insert_the_render_views?
34
+ unless File.exist?(index_path)
35
+ puts "File[ #{index_path} ] does not exist. creating file"
36
+ create_file index_path, '/ File created with NgOnRails view generator'
37
+ end
38
+
39
+ unless File.exist?(show_path)
40
+ puts "File[ #{show_path} ] does not exist. creating file"
41
+ create_file show_path, '/ File created with NgOnRails view generator'
42
+ end
43
+ end
44
+ end
45
+
46
+
47
+ def insert_render_views
48
+ if insert_the_render_views?
49
+ append_file index_path, render_index_view_template
50
+ append_file show_path, render_show_view_template
51
+ end
52
+ end
53
+
54
+ def add_css
55
+ if options[:styles]
56
+ styles_path = "app/assets/stylesheets/ng_on_rails_styles.css"
57
+ unless File.exist?(styles_path)
58
+ puts "Adding ng_on_rails_styles.css -- <better with bootstrap and fontAwesome!>"
59
+ copy_file "#{ViewsGenerator.source_root}/styles_template.css", styles_path
60
+ end
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def class_name
67
+ @class_name ||= model_name.classify
68
+ end
69
+
70
+ def resource_name
71
+ @resource_name ||= class_name.underscore
72
+ end
73
+
74
+ def plural_name
75
+ @plural_name ||= resource_name.pluralize
76
+ end
77
+
78
+ def args arg_string
79
+ parts = arg_string.split("{")
80
+ if (parts.length > 1)
81
+ if !!parts[1].match(/required/)
82
+ required = true
83
+ else
84
+ required = false
85
+ end
86
+ if !!parts[1].match(/skip_form/)
87
+ skip_form = true
88
+ else
89
+ skip_form = false
90
+ end
91
+ if !!parts[1].match(/skip_index/)
92
+ skip_index = true
93
+ else
94
+ skip_index = false
95
+ end
96
+ if !!parts[1].match(/link/)
97
+ link = true
98
+ else
99
+ link = false
100
+ end
101
+ end
102
+ args = parts[0].split(":")
103
+ {
104
+ name: args[0],
105
+ type: args[1],
106
+ required: required,
107
+ skip_form: skip_form,
108
+ skip_index: skip_index,
109
+ link: link
110
+ }
111
+ end
112
+
113
+ #
114
+ # VIEW HELPERS
115
+ #
116
+
117
+ def type_to_class type_string
118
+ unless type_string.blank?
119
+ ".#{type_string}"
120
+ end
121
+ end
122
+
123
+ def required_string property_hash
124
+ if property_hash[:required]
125
+ required_string = "required=\"true\""
126
+ end
127
+ end
128
+
129
+ def insert_the_render_views?
130
+ !(options[:render_views].blank? || options[:render_views]=="false")
131
+ end
132
+
133
+ def is_plural? string
134
+ string.pluralize == string
135
+ end
136
+
137
+ def belongs_to_array
138
+ if options[:belongs_to].blank?
139
+ []
140
+ else
141
+ options[:belongs_to].map do |a|
142
+ a.underscore.gsub(" ","")+".id"
143
+ end
144
+ end
145
+ end
146
+
147
+ def belongs_to_comma
148
+ unless options[:belongs_to].blank?
149
+ ","
150
+ end
151
+ end
152
+
153
+ def belongs_to_values
154
+ unless options[:belongs_to].blank?
155
+ belongs_to_array.join(",")
156
+ end
157
+ end
158
+
159
+ #
160
+ # TEMPLATES
161
+ #
162
+
163
+ def index_path
164
+ @index_path ||= "app/views/#{plural_name}/index.html.#{options[:format]}"
165
+ end
166
+
167
+ def show_path
168
+ @show_path ||= "app/views/#{plural_name}/show.html.#{options[:format]}"
169
+ end
170
+
171
+ def render_index_view_template
172
+ if options[:format]=="erb"
173
+ puts "ERB format not yet added"
174
+ elsif options[:format]=="haml"
175
+ puts "HAML format not yet added"
176
+ else
177
+ "
178
+
179
+ /
180
+ / Inserted by NgOnRails view generator.
181
+ /
182
+ div ng-init=\"#{plural_name}=ctrl.rails.#{plural_name}\" render_view=\"true\" url=\"#{plural_name}/index\"
183
+ /
184
+ /
185
+ /
186
+
187
+ "
188
+ end
189
+ end
190
+
191
+ def render_show_view_template
192
+ if options[:format]=="erb"
193
+ puts "ERB format not yet added"
194
+ elsif options[:format]=="haml"
195
+ puts "HAML format not yet added"
196
+ else
197
+ "
198
+
199
+ /
200
+ / Inserted by NgOnRails view generator.
201
+ /
202
+ div ng-init=\"#{resource_name}=ctrl.rails.#{resource_name}\" render_view=\"true\" url=\"#{plural_name}/show\"
203
+ /
204
+ /
205
+ /
206
+
207
+ "
208
+ end
209
+ end
210
+ end
211
+ end
@@ -1,3 +1,3 @@
1
1
  module NgOnRails
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.3.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ng_on_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brookie Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-06 00:00:00.000000000 Z
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: angularjs-rails
@@ -91,7 +91,7 @@ files:
91
91
  - README.md
92
92
  - Rakefile
93
93
  - app/assets/javascripts/app.js
94
- - app/assets/javascripts/directives/shared.js.erb
94
+ - app/assets/javascripts/directives/shared.js.coffee
95
95
  - app/assets/javascripts/ng_on_rails.js
96
96
  - app/controllers/ng_on_rails_controller.rb
97
97
  - app/helpers/ng_on_rails_helper.rb
@@ -101,6 +101,13 @@ files:
101
101
  - lib/generators/ng_on_rails/resource_generator.rb
102
102
  - lib/generators/ng_on_rails/templates/controller_template.js.erb
103
103
  - lib/generators/ng_on_rails/templates/resource_template.js.erb
104
+ - lib/generators/ng_on_rails/templates/styles_template.css
105
+ - lib/generators/ng_on_rails/templates/views/slim/_form.html.erb
106
+ - lib/generators/ng_on_rails/templates/views/slim/_model.html.erb
107
+ - lib/generators/ng_on_rails/templates/views/slim/_show.html.erb
108
+ - lib/generators/ng_on_rails/templates/views/slim/index.html.erb
109
+ - lib/generators/ng_on_rails/templates/views/slim/show.html.erb
110
+ - lib/generators/ng_on_rails/views_generator.rb
104
111
  - lib/ng_on_rails.rb
105
112
  - lib/ng_on_rails/engine.rb
106
113
  - lib/ng_on_rails/version.rb
@@ -1,33 +0,0 @@
1
- NgOnRailsApp.directive(
2
- "renderView",
3
- function(){
4
- return {
5
- restrict: "AE",
6
- transclude: true,
7
- template: function(el,attrs){
8
- format = attrs.format || "html"
9
- return '<div ng_include="\'/angular_app/'+attrs.url+'.'+format+'\'"></div>'
10
- }
11
- }
12
- }
13
- )
14
- NgOnRailsApp.directive(
15
- "render",
16
- function(){
17
- return {
18
- restrict: "AE",
19
- transclude: true,
20
- template: function(el,attrs){
21
- format = attrs.format || "html"
22
- url_parts = attrs.url.split("/")
23
- if (url_parts[url_parts.length-1].trim()==""){
24
- url_parts.pop()
25
- }
26
- last = url_parts.pop()
27
- url_parts.push("_"+last)
28
- path = url_parts.join("/")
29
- return '<div ng_include="\'/angular_app/'+path+'.'+format+'\'"></div>'
30
- }
31
- }
32
- }
33
- )