ng_on_rails 0.0.2 → 0.0.3

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: cb7057e26bdca810363ede7c7321dfa6c488b205
4
- data.tar.gz: 074bf7d73e00c03becd410f63c1605546c63ae3e
3
+ metadata.gz: 4f212d2b4cb8e37f88d4c87d993abfaeadafc60e
4
+ data.tar.gz: 0703fa143da3d32eabfcafdfddba2651b4bd746a
5
5
  SHA512:
6
- metadata.gz: cd18e125548c1a9190d5c69544d9e3fe31a835b4b9bc72af4e6390019589436557208a69dea9d2fe7dbbc89d5f2d62c34f5e81fa316aaa134feda85f9d8a81b6
7
- data.tar.gz: d46407676a418af219fd147e511feae0d3dc6933b6b0a1b2d9e71e677178004411ee6ea6645224f1bd92eef0fc502826a731aa9dc686c295d8f86a2baddadd6b
6
+ metadata.gz: c7e067cfaf1f72ae1e6dba5a1c8962051641c54970517ec4d18c644e184902333648f05a18f05212b17e6ba07c9ce706dc33b49b467e92bbbc4271ed82ba6ad6
7
+ data.tar.gz: a74e9a03945024bc090581f3ed9e7a00f571447f9d78bc55c7294fd5e287c4a3c1f2fda190b3ffe537af8dbc883d25abbf8b690ca169714a9fcc611126aceddc
data/README.md CHANGED
@@ -10,7 +10,7 @@ The main motivations behind this gem is to standardize and simplify how AngularJ
10
10
 
11
11
  I am just getting started but this does function *as-is*. Some things left to do:
12
12
  * Write more specs!!!
13
- * Create generators for controllers/services/(views?)
13
+ * (Create generators for views?)
14
14
  * (ViewHelper functions via shared service?)
15
15
 
16
16
  ### Install it!
@@ -36,7 +36,7 @@ Finally, in your layout below the `javascript_include_tag "application"` load th
36
36
  </script>
37
37
  ```
38
38
 
39
- Here, ng_data is a rails varible discuss [below](#locals_to_json). A typical application layout (in Slim) might look like...
39
+ Here, ng_data is a rails varible discussed [below](#locals_to_json). A typical application layout (in Slim) might look like...
40
40
  ```slim
41
41
  - ng_data = {}
42
42
  - ng_data['BUILD'] = true
@@ -61,21 +61,28 @@ html
61
61
  == yield :javascripts
62
62
  ```
63
63
 
64
+ You are now up and running! To generate controllers and resource-services use NgOnRails generators:
65
+ ```
66
+ # Assuming the Rails app has a "Page" model:
67
+ $ bundle exec rails g ng_on_rails:controller Page
68
+ $ bundle exec rails g ng_on_rails:resource Page
69
+ ```
70
+
64
71
  ##### Service: Rails
65
- As will be discussed in detail [below](#locals_to_json) NgOnRails will now provide you with a Rails-service that can be injected into your Angular Controllers. This service has all your rails variables contained in json. So @page and @pages will get mapped to Rails.page and Rails.pages to be used by your angular app.
72
+ As will be discussed in detail [below](#locals_to_json), NgOnRails provides a Rails-service that can be injected into your Angular Controllers. This service has all your rails variables contained in json. So @page and @pages will get mapped to Rails.page and Rails.pages to be used by your angular app.
66
73
 
67
74
  ##### Directives: render and render\_view
68
75
  NgOnRails provides you with two directives, `render` for displapying angular partials and `render_view` for displaying angular views. More details [here](#render_directives).
69
76
 
70
77
  ##### Note: NgOnRailsApp
71
- A AngularApp, NgOnRailsApp, is automatically created if it doesn't already exsit
78
+ An angular-app, NgOnRailsApp, is automatically created if it doesn't already exsit
72
79
  ```javascript
73
80
  # ng_on_rails/app/assets/javascripts/app.js
74
81
  if (!window.NgOnRailsApp){
75
82
  window.NgOnRailsApp = angular.module("NgOnRailsApp", ["ngResource","ngAnimate","ngSanitize"])
76
83
  }
77
84
  ```
78
- If you want to overide NgOnRailsApp - so you can inject your own providers
85
+ If you want to overide NgOnRailsApp, so you can inject your own providers,
79
86
  Just incldue a app.js file that defines NgOnRailsApp in your own app and load it **before** ng\_on\_rails
80
87
  ```javascript
81
88
  # your_app/app/assets/javascripts/angular_app/app.js
@@ -127,7 +134,7 @@ Now you can then use the ng\_on\_rails directives 'render' and 'render\_view' to
127
134
 
128
135
  #### Conventions
129
136
 
130
- The test_app serves as an example of the conventions discussed below, but before looking it over read [this](#test_app).
137
+ The [test_app](https://github.com/brookisme/ng_on_rails/tree/master/spec/test_app) serves as an example of the conventions discussed below, but before looking it over read [this](#test_app).
131
138
 
132
139
  * Put Angular controllers/directives/... in a folder "angular\_app" in the assets directory. Similarly, as discussed above, the angular views(partials) are placed in a folder "angular\_app" in the views directory
133
140
  ```
@@ -188,10 +195,13 @@ Note that using distinguishing characterisic of loading the controller via `ng_c
188
195
 
189
196
 
190
197
  #### Angular Services for Rails Models
191
- You are going to have a service for each rails model. I plan on adding generators but for now this is what my services look like
192
-
198
+ You are going to have a resource-service for each rails model. You can create these with the NgOnRails generator
199
+ ```
200
+ $ bundle exec rails g ng_on_rails:resource Page
201
+ ```
202
+ Which creates the following file:
193
203
  ```coffeescript
194
- # app/assets/javascripts/angular_app/services/page.js.coffee
204
+ # your_app/app/assets/javascripts/angular_app/services/page.js.coffee
195
205
  NgOnRailsApp.factory "Page", ($resource) ->
196
206
  PageResource = $resource "/questions/:id.json", {id: "@id"}, {
197
207
  update:{method: "PUT"}
@@ -202,37 +212,48 @@ NgOnRailsApp.factory "Page", ($resource) ->
202
212
 
203
213
 
204
214
  #### Angular Controllers for Rails Models
205
- Simalarly you are going to have an angular controller for each rails model. Again, I plan on adding generators but for now an example is below. Note that I place all the REST methods in a rest object. Bridge is a service I use to pass data from one controller to another.
215
+ Simalarly you are going to have an angular controller for each rails model. A controller that uses the Rails-service and pre-defined REST methods can be generated with
216
+ ```
217
+ $ bundle exec rails g ng_on_rails:controller Page
218
+ ```
219
+ The output is below (*Note that I place all the REST methods in a rest object*):
206
220
 
207
221
  ```coffeescript
208
- NgOnRailsApp.controller 'PagesController', ($scope,Page,Bridge) ->
209
- # setup
222
+ # your_app/app/assets/javascripts/angular_app/controllers/pages_controller.js.coffee
223
+ NgOnRailsApp.controller 'PagesController', ($scope,Page,Rails) ->
224
+ #
225
+ # CONTROLLER SETUP
226
+ #
210
227
  ctrl = this
211
- ctrl.bridge = Bridge
228
+ ctrl.rails = Rails
212
229
  ctrl.data = {}
213
230
 
214
- # initializers
231
+
232
+ #
233
+ # INITIALIZERS
234
+ #
215
235
  ctrl.setPage = (page)->
216
- ctrl.bridge.data.page = page
236
+ ctrl.data.page = page
217
237
  ctrl.setPages = (pages)->
218
- ctrl.bridge.data.pages = pages
238
+ ctrl.data.pages = pages
239
+
219
240
 
220
- # rest methods
241
+ #
242
+ # REST METHODS
243
+ #
221
244
  ctrl.rest =
222
245
  index: ->
223
246
  params = {}
224
247
  Page.query(params).$promise.then (pages) ->
225
- ctrl.bridge.data.pages = pages
248
+ ctrl.data.pages = pages
226
249
 
227
250
  show: (page_id)->
228
251
  Page.get({id: page_id}).$promise.then (page) ->
229
- ctrl.bridge.data.page = page
230
- ctrl.bridge.data.page_versions = page.page_versions
231
-
232
- new: (doc_id)->
252
+ ctrl.data.page = page
253
+
254
+ new: ()->
233
255
  ctrl.clear()
234
256
  ctrl.data.activePage = {}
235
- ctrl.data.activePage.doc_id = doc_id
236
257
  ctrl.data.creating_new_page = true
237
258
 
238
259
  create: ->
@@ -242,8 +263,8 @@ NgOnRailsApp.controller 'PagesController', ($scope,Page,Bridge) ->
242
263
  Page.save(
243
264
  working_page,
244
265
  (page)->
245
- ctrl.bridge.data.pages ||= []
246
- ctrl.bridge.data.pages.push(page)
266
+ ctrl.data.pages ||= []
267
+ ctrl.data.pages.push(page)
247
268
  ctrl.clear()
248
269
  ctrl.locked = false
249
270
  ,
@@ -253,11 +274,9 @@ NgOnRailsApp.controller 'PagesController', ($scope,Page,Bridge) ->
253
274
  ctrl.locked = false
254
275
  )
255
276
 
256
- edit: (page,doc_id) ->
277
+ edit: (page) ->
257
278
  ctrl.clear()
258
- page.show_details = false
259
279
  ctrl.data.activePage = page
260
- ctrl.data.activePage.doc_id = doc_id
261
280
  ctrl.data.editing_page = true
262
281
 
263
282
  update: (page)->
@@ -281,7 +300,7 @@ NgOnRailsApp.controller 'PagesController', ($scope,Page,Bridge) ->
281
300
  Page.delete(
282
301
  page,
283
302
  (page)->
284
- pages ||= ctrl.bridge.data.pages
303
+ pages ||= ctrl.data.pages
285
304
  pages.splice(index,1)
286
305
  ,
287
306
  (error)->
@@ -290,22 +309,9 @@ NgOnRailsApp.controller 'PagesController', ($scope,Page,Bridge) ->
290
309
  ctrl.clear()
291
310
 
292
311
 
293
- # scope methods
294
- ctrl.toggleDetails = (page)->
295
- page.show_details = !page.show_details
296
-
297
- ctrl.resort = (pages) ->
298
- for page, index in pages
299
- page.order_index = index + 1
300
- Page.update(
301
- page,
302
- (page)->
303
- # success handler
304
- ,
305
- (error)->
306
- console.log("update_error:",error)
307
- )
308
-
312
+ #
313
+ # SCOPE METHODS
314
+ #
309
315
  ctrl.clear = ->
310
316
  ctrl.data.activePage = null
311
317
  ctrl.data.creating_new_page = false
@@ -315,10 +321,17 @@ NgOnRailsApp.controller 'PagesController', ($scope,Page,Bridge) ->
315
321
  (ctrl.data.editing_page && !!page && page.id == ctrl.data.activePage.id) ||
316
322
  (ctrl.data.creating_new_page && !page)
317
323
 
318
- # private methods
319
- some_private_method = ->
320
- console.log('nobody knows i exist')
321
-
324
+
325
+ #
326
+ # PRIVATE METHODS
327
+ #
328
+ # => add methods here, not attached to the ctrl object to be used internally
329
+ #
330
+
331
+
332
+ #
333
+ # END
334
+ #
322
335
  return
323
336
  ```
324
337
  <a name="locals_to_json"></a>
@@ -342,13 +355,12 @@ To understand it better look at [ng_on_rails_helper.rb](https://github.com/brook
342
355
 
343
356
  <a name="test_app"></a>
344
357
  #### Test App
345
- The [test_app](https://github.com/brookisme/ng_on_rails/blob/master/app/spec/test_app) can be used as an example application. A some details to mention:
358
+ The [test_app](https://github.com/brookisme/ng_on_rails/tree/master/spec/test_app) can be used as an example application. A some details to mention:
346
359
 
347
360
  * The DB is Postgres
348
361
  * The (Angular) Views use Slim
349
362
  * The JS uses CoffeeScript (except for _rails_service.js.erb -- where I need access to Rails)
350
363
  * Much of app/views/angular_app & app/assests/javascripts/angular_app has been cut and pasted in from a different project and the models have been generated with Rails scaffolding. This leads to a few oddities:
351
- * There is a mixture of both erb and slim
352
364
  * The full scaffolding has been left in but the Angular views are contained solely withing the docs-index and doc-show pages.
353
365
  * Though there is limited CSS but I use both bootstrap and font-awesome
354
366
 
@@ -6,7 +6,6 @@ NgOnRailsApp.directive(
6
6
  transclude: true,
7
7
  template: function(el,attrs){
8
8
  format = attrs.format || "html"
9
- console.log(attrs.url,format)
10
9
  return '<div ng_include="\'/angular_app/'+attrs.url+'.'+format+'\'"></div>'
11
10
  }
12
11
  }
@@ -2,8 +2,6 @@ module NgOnRailsHelper
2
2
  def locals_to_json ng_data
3
3
  j = ActiveSupport::JSON
4
4
  locals_hash = {}
5
- puts "***********"
6
- puts "#{instance_variable_names}"
7
5
  instance_variable_names.each do |var_name|
8
6
  unless !!var_name.match(/^@_/)
9
7
  unless ignorables.include? var_name
@@ -0,0 +1,14 @@
1
+ require 'rails/generators'
2
+ module NgOnRails
3
+ class ControllerGenerator < Rails::Generators::NamedBase
4
+ desc "Creates NgOnRails-style AngularJS Controller"
5
+
6
+ def self.source_root
7
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
8
+ end
9
+
10
+ def generate_layout
11
+ template "#{ControllerGenerator.source_root}/controller_template.js.erb", "app/assets/javascripts/angular_app/controllers/#{plural_name}_controller.js.coffee"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'rails/generators'
2
+ module NgOnRails
3
+ class ResourceGenerator < Rails::Generators::NamedBase
4
+ desc "Creates NgOnRails-style AngularJS Resource Service"
5
+
6
+ def self.source_root
7
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
8
+ end
9
+
10
+ def generate_layout
11
+ template "#{ResourceGenerator.source_root}/resource_template.js.erb", "app/assets/javascripts/angular_app/services/#{file_name}.js.coffee"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,113 @@
1
+ NgOnRailsApp.controller '<%="#{class_name.pluralize}"%>Controller', ($scope,<%="#{class_name}"%>,Rails) ->
2
+ #
3
+ # CONTROLLER SETUP
4
+ #
5
+ ctrl = this
6
+ ctrl.rails = Rails
7
+ ctrl.data = {}
8
+
9
+
10
+ #
11
+ # INITIALIZERS
12
+ #
13
+ ctrl.set<%="#{class_name}"%> = (<%="#{file_name}"%>)->
14
+ ctrl.data.<%="#{file_name}"%> = <%="#{file_name}"%>
15
+ ctrl.set<%="#{class_name.pluralize}"%> = (<%="#{plural_name}"%>)->
16
+ ctrl.data.<%="#{plural_name}"%> = <%="#{plural_name}"%>
17
+
18
+
19
+ #
20
+ # REST METHODS
21
+ #
22
+ ctrl.rest =
23
+ index: ->
24
+ params = {}
25
+ <%="#{class_name}"%>.query(params).$promise.then (<%="#{plural_name}"%>) ->
26
+ ctrl.data.<%="#{plural_name}"%> = <%="#{plural_name}"%>
27
+
28
+ show: (<%="#{file_name}"%>_id)->
29
+ <%="#{class_name}"%>.get({id: <%="#{file_name}"%>_id}).$promise.then (<%="#{file_name}"%>) ->
30
+ ctrl.data.<%="#{file_name}"%> = <%="#{file_name}"%>
31
+
32
+ new: ()->
33
+ ctrl.clear()
34
+ ctrl.data.active<%="#{class_name}"%> = {}
35
+ ctrl.data.creating_new_<%="#{file_name}"%> = true
36
+
37
+ create: ->
38
+ if !(ctrl.locked || ctrl.<%="#{file_name}"%>_form.$error.required)
39
+ ctrl.locked = true
40
+ working_<%="#{file_name}"%> = angular.copy(ctrl.data.active<%="#{class_name}"%>)
41
+ <%="#{class_name}"%>.save(
42
+ working_<%="#{file_name}"%>,
43
+ (<%="#{file_name}"%>)->
44
+ ctrl.data.<%="#{plural_name}"%> ||= []
45
+ ctrl.data.<%="#{plural_name}"%>.push(<%="#{file_name}"%>)
46
+ ctrl.clear()
47
+ ctrl.locked = false
48
+ ,
49
+ (error)->
50
+ console.log("create_error:",error)
51
+ ctrl.clear()
52
+ ctrl.locked = false
53
+ )
54
+
55
+ edit: (<%="#{file_name}"%>) ->
56
+ ctrl.clear()
57
+ ctrl.data.active<%="#{class_name}"%> = <%="#{file_name}"%>
58
+ ctrl.data.editing_<%="#{file_name}"%> = true
59
+
60
+ update: (<%="#{file_name}"%>)->
61
+ if !(ctrl.locked || ctrl.<%="#{file_name}"%>_form.$error.required)
62
+ ctrl.locked = true
63
+ <%="#{file_name}"%> = ctrl.data.active<%="#{class_name}"%> unless !!<%="#{file_name}"%>
64
+ working_<%="#{file_name}"%> = angular.extend(angular.copy(<%="#{file_name}"%>),ctrl.data.active<%="#{class_name}"%>)
65
+ <%="#{class_name}"%>.update(
66
+ working_<%="#{file_name}"%>,
67
+ (<%="#{file_name}"%>)->
68
+ # success handler
69
+ ctrl.locked = false
70
+ ,
71
+ (error)->
72
+ console.log("update_error:",error)
73
+ ctrl.locked = false
74
+ )
75
+ ctrl.clear()
76
+
77
+ delete: (index,<%="#{file_name}"%>,<%="#{plural_name}"%>)->
78
+ <%="#{class_name}"%>.delete(
79
+ <%="#{file_name}"%>,
80
+ (<%="#{file_name}"%>)->
81
+ <%="#{plural_name}"%> ||= ctrl.data.<%="#{plural_name}"%>
82
+ <%="#{plural_name}"%>.splice(index,1)
83
+ ,
84
+ (error)->
85
+ console.log("delete_error:",error)
86
+ )
87
+ ctrl.clear()
88
+
89
+
90
+ #
91
+ # SCOPE METHODS
92
+ #
93
+ ctrl.clear = ->
94
+ ctrl.data.active<%="#{class_name}"%> = null
95
+ ctrl.data.creating_new_<%="#{file_name}"%> = false
96
+ ctrl.data.editing_<%="#{file_name}"%> = false
97
+
98
+ ctrl.is_editing = (<%="#{file_name}"%>)->
99
+ (ctrl.data.editing_<%="#{file_name}"%> && !!<%="#{file_name}"%> && <%="#{file_name}"%>.id == ctrl.data.active<%="#{class_name}"%>.id) ||
100
+ (ctrl.data.creating_new_<%="#{file_name}"%> && !<%="#{file_name}"%>)
101
+
102
+
103
+ #
104
+ # PRIVATE METHODS
105
+ #
106
+ # => add methods here, not attached to the ctrl object to be used internally
107
+ #
108
+
109
+
110
+ #
111
+ # END
112
+ #
113
+ return
@@ -0,0 +1,6 @@
1
+ NgOnRailsApp.factory '<%="#{class_name}"%>', ($resource) ->
2
+ <%="#{class_name}"%>Resource = $resource '/<%="#{plural_name}"%>/:id.json', {id: '@id'}, {
3
+ update:{method: "PUT"}
4
+ }
5
+ class <%="#{class_name}"%> extends <%="#{class_name}"%>Resource
6
+ # place class and instance methods here
@@ -1,3 +1,3 @@
1
1
  module NgOnRails
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
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.2
4
+ version: 0.0.3
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-04 00:00:00.000000000 Z
11
+ date: 2014-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: angularjs-rails
@@ -97,6 +97,10 @@ files:
97
97
  - app/helpers/ng_on_rails_helper.rb
98
98
  - app/views/angular_app/_rails_service.js.erb
99
99
  - config/routes.rb
100
+ - lib/generators/ng_on_rails/controller_generator.rb
101
+ - lib/generators/ng_on_rails/resource_generator.rb
102
+ - lib/generators/ng_on_rails/templates/controller_template.js.erb
103
+ - lib/generators/ng_on_rails/templates/resource_template.js.erb
100
104
  - lib/ng_on_rails.rb
101
105
  - lib/ng_on_rails/engine.rb
102
106
  - lib/ng_on_rails/version.rb