perspectives 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.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +13 -0
  4. data/lib/generators/perspectives/install.rb +38 -0
  5. data/lib/generators/perspectives/scaffold/scaffold_generator.rb +54 -0
  6. data/lib/generators/perspectives/scaffold/templates/edit.mustache +6 -0
  7. data/lib/generators/perspectives/scaffold/templates/edit.rb +8 -0
  8. data/lib/generators/perspectives/scaffold/templates/form.mustache +25 -0
  9. data/lib/generators/perspectives/scaffold/templates/form.rb +27 -0
  10. data/lib/generators/perspectives/scaffold/templates/index.mustache +22 -0
  11. data/lib/generators/perspectives/scaffold/templates/index.rb +9 -0
  12. data/lib/generators/perspectives/scaffold/templates/new.mustache +5 -0
  13. data/lib/generators/perspectives/scaffold/templates/new.rb +7 -0
  14. data/lib/generators/perspectives/scaffold/templates/show.mustache +10 -0
  15. data/lib/generators/perspectives/scaffold/templates/show.rb +8 -0
  16. data/lib/generators/perspectives/scaffold/templates/tiny.mustache +8 -0
  17. data/lib/generators/perspectives/scaffold/templates/tiny.rb +8 -0
  18. data/lib/generators/perspectives/templates/application.js +13 -0
  19. data/lib/generators/perspectives/templates/rails/scaffold_controller/controller.rb +82 -0
  20. data/lib/perspectives/active_record.rb +17 -0
  21. data/lib/perspectives/base.rb +30 -0
  22. data/lib/perspectives/caching.rb +82 -0
  23. data/lib/perspectives/collection.rb +21 -0
  24. data/lib/perspectives/configuration.rb +14 -0
  25. data/lib/perspectives/context.rb +18 -0
  26. data/lib/perspectives/controller_additions.rb +142 -0
  27. data/lib/perspectives/forms/base.rb +5 -0
  28. data/lib/perspectives/forms/text_field.rb +15 -0
  29. data/lib/perspectives/forms.rb +7 -0
  30. data/lib/perspectives/memoization.rb +30 -0
  31. data/lib/perspectives/mustache_compiler.rb +33 -0
  32. data/lib/perspectives/params.rb +48 -0
  33. data/lib/perspectives/properties.rb +130 -0
  34. data/lib/perspectives/railtie.rb +42 -0
  35. data/lib/perspectives/rendering.rb +15 -0
  36. data/lib/perspectives/responder.rb +15 -0
  37. data/lib/perspectives/templating.rb +39 -0
  38. data/lib/perspectives/version.rb +3 -0
  39. data/lib/perspectives.rb +48 -0
  40. data/lib/rails/projections.json +12 -0
  41. data/lib/tasks/perspectives_tasks.rake +4 -0
  42. data/spec/dummy/README.rdoc +28 -0
  43. data/spec/dummy/Rakefile +6 -0
  44. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  45. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  46. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  47. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  48. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  49. data/spec/dummy/bin/bundle +3 -0
  50. data/spec/dummy/bin/rails +4 -0
  51. data/spec/dummy/bin/rake +4 -0
  52. data/spec/dummy/config/application.rb +23 -0
  53. data/spec/dummy/config/boot.rb +5 -0
  54. data/spec/dummy/config/database.yml +25 -0
  55. data/spec/dummy/config/environment.rb +5 -0
  56. data/spec/dummy/config/environments/development.rb +29 -0
  57. data/spec/dummy/config/environments/production.rb +80 -0
  58. data/spec/dummy/config/environments/test.rb +36 -0
  59. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  60. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  61. data/spec/dummy/config/initializers/inflections.rb +16 -0
  62. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  63. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  64. data/spec/dummy/config/initializers/session_store.rb +3 -0
  65. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  66. data/spec/dummy/config/locales/en.yml +23 -0
  67. data/spec/dummy/config/routes.rb +56 -0
  68. data/spec/dummy/config.ru +4 -0
  69. data/spec/dummy/log/test.log +0 -0
  70. data/spec/dummy/public/404.html +58 -0
  71. data/spec/dummy/public/422.html +58 -0
  72. data/spec/dummy/public/500.html +57 -0
  73. data/spec/dummy/public/favicon.ico +0 -0
  74. data/spec/lib/perspectives/properties_spec.rb +31 -0
  75. data/spec/lib/perspectives/templating_spec.rb +18 -0
  76. data/spec/lib/perspectives_spec.rb +5 -0
  77. data/spec/mustaches/users/simple_info.mustache +1 -0
  78. data/spec/rails_helper.rb +11 -0
  79. data/spec/spec_helper.rb +16 -0
  80. data/vendor/assets/javascripts/mustache-0.8.1.js +570 -0
  81. data/vendor/assets/javascripts/perspectives/forms/text_field.mustache +3 -0
  82. data/vendor/assets/javascripts/perspectives.js +152 -0
  83. data/vendor/assets/javascripts/perspectives_views.js +1 -0
  84. metadata +233 -0
@@ -0,0 +1,152 @@
1
+ (function($, window, document, undefined) {
2
+ window.Perspectives = window.Perspectives || {}
3
+
4
+ var renderTemplateData = function(data) {
5
+ var view = {}
6
+
7
+ for(var key in data) {
8
+ if (!data.hasOwnProperty(key)) continue
9
+
10
+ if ($.isArray(data[key])) {
11
+ view[key] = $.map(data[key], function(value) {
12
+ var new_value = $.extend(!!'deep_copy', {}, value)
13
+
14
+ if (value['_template_key']) {
15
+ new_value['to_s'] = new_value['to_html'] = renderTemplateData(value)
16
+ }
17
+
18
+ return new_value
19
+ })
20
+
21
+ view[key].toString = function() { return $.map(this, function(value) { return value.to_html }).join('') }
22
+ } else if (data[key] && typeof data[key] === 'object' && data[key]['_template_key']) {
23
+ view[key] = renderTemplateData(data[key])
24
+ } else {
25
+ view[key] = data[key]
26
+ }
27
+ }
28
+
29
+ view['to_s'] = function() { toString() }
30
+
31
+ return Perspectives.views[data._template_key](view)
32
+ }
33
+
34
+ // pretty much ganked from pjax...
35
+ var locationReplace = function(url) {
36
+ window.history.replaceState(null, "", "#")
37
+ window.location.replace(url)
38
+ }
39
+
40
+ var perspectivesVersion = function() {
41
+ return $('meta').filter(function() {
42
+ var name = $(this).attr('http-equiv')
43
+ return name && name.toUpperCase() === 'X-PERSPECTIVES-VERSION'
44
+ }).attr('content')
45
+ }
46
+
47
+ var renderResponse = function(options) {
48
+ var $globalContainer = globalPerspectivesContainer(),
49
+ $container = $(options.container).length ? $(options.container) : $globalContainer
50
+ console.time('perspectives rendering')
51
+
52
+ var version = perspectivesVersion() || ''
53
+ if (version.length && version !== xhr.getResponseHeader('X-Perspectives-Version')) {
54
+ locationReplace(options.href)
55
+ return false
56
+ }
57
+
58
+ var $rendered = $(renderTemplateData(options.json))
59
+
60
+ $container.html($rendered)
61
+
62
+ if (!options.noPushState) {
63
+ window.history.pushState({container: globalPerspectivesContainer().selector}, options.href, options.href)
64
+ }
65
+
66
+ $(document).trigger('perspectives:load', options.xhr)
67
+
68
+ console.timeEnd('perspectives rendering')
69
+ }
70
+
71
+ var globalPerspectivesContainer = function() {
72
+ return $('[data-global-perspectives-target]')
73
+ }
74
+
75
+ var handlePerspectivesClick = function(container) {
76
+ var $this = $(this)
77
+
78
+ navigate({
79
+ href: this.href,
80
+ container: $this.attr('data-perspectives-target'),
81
+ fullPage: !!$this.attr('data-perspectives-full-page'),
82
+ element: $this
83
+ })
84
+
85
+ return false
86
+ }
87
+
88
+ var navigate = function(options) {
89
+ var $element = $(options.element || document)
90
+
91
+ $.ajax({
92
+ method: 'GET',
93
+ url: options.href,
94
+ dataType: 'json',
95
+ headers: { 'x-perspectives-full-page': !!options.fullPage }
96
+ }).success(function(json, status, xhr) {
97
+ $element.trigger('perspectives:response', {
98
+ json: json,
99
+ status: status,
100
+ xhr: xhr,
101
+ href: options.href,
102
+ container: options.container,
103
+ noPushState: options.noPushState
104
+ })
105
+ })
106
+ }
107
+
108
+ $(document).on('perspectives:response', function(e, options) { renderResponse(options) })
109
+
110
+ $(document).on('ajax:success', function(event, data, status, xhr) {
111
+ if (!xhr.getResponseHeader('Content-Type').match(/json/i)) return
112
+
113
+ var $form = $(event.target),
114
+ $globalContainer = globalPerspectivesContainer(),
115
+ href = xhr.getResponseHeader('Location') || $form.attr('action'),
116
+ container = $form.attr('data-perspectives-target')
117
+
118
+ $form.trigger('perspectives:response', {
119
+ json: data,
120
+ status: status,
121
+ xhr: xhr,
122
+ href: href,
123
+ container: container
124
+ })
125
+
126
+ return false
127
+ })
128
+
129
+ $(window).on('popstate.perspectives', function(event) {
130
+ var originalEvent = event.originalEvent
131
+ if(originalEvent && originalEvent.state && originalEvent.state.container) {
132
+ navigate({
133
+ href: window.location.href,
134
+ container: originalEvent.state.container,
135
+ fullPage: true,
136
+ noPushState: true
137
+ })
138
+ }
139
+ })
140
+
141
+ $.fn.perspectives = function(selector, container) {
142
+ $(container).attr('data-global-perspectives-target', true)
143
+
144
+ $(this).on('click', selector, function() {
145
+ return handlePerspectivesClick.bind(this)(container)
146
+ })
147
+ }
148
+
149
+ Perspectives.renderTemplateData = Perspectives.render = renderTemplateData
150
+ Perspectives.navigate = navigate
151
+ Perspectives.renderResponse = renderResponse
152
+ })(jQuery, window, document)
@@ -0,0 +1 @@
1
+ //= require_tree ./perspectives/forms
metadata ADDED
@@ -0,0 +1,233 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: perspectives
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Warner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.3
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mustache
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.99.5
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.99.5
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: View objects and logicless templates
84
+ email:
85
+ - wwarner.andrew@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - MIT-LICENSE
91
+ - Rakefile
92
+ - lib/generators/perspectives/install.rb
93
+ - lib/generators/perspectives/scaffold/scaffold_generator.rb
94
+ - lib/generators/perspectives/scaffold/templates/edit.mustache
95
+ - lib/generators/perspectives/scaffold/templates/edit.rb
96
+ - lib/generators/perspectives/scaffold/templates/form.mustache
97
+ - lib/generators/perspectives/scaffold/templates/form.rb
98
+ - lib/generators/perspectives/scaffold/templates/index.mustache
99
+ - lib/generators/perspectives/scaffold/templates/index.rb
100
+ - lib/generators/perspectives/scaffold/templates/new.mustache
101
+ - lib/generators/perspectives/scaffold/templates/new.rb
102
+ - lib/generators/perspectives/scaffold/templates/show.mustache
103
+ - lib/generators/perspectives/scaffold/templates/show.rb
104
+ - lib/generators/perspectives/scaffold/templates/tiny.mustache
105
+ - lib/generators/perspectives/scaffold/templates/tiny.rb
106
+ - lib/generators/perspectives/templates/application.js
107
+ - lib/generators/perspectives/templates/rails/scaffold_controller/controller.rb
108
+ - lib/perspectives.rb
109
+ - lib/perspectives/active_record.rb
110
+ - lib/perspectives/base.rb
111
+ - lib/perspectives/caching.rb
112
+ - lib/perspectives/collection.rb
113
+ - lib/perspectives/configuration.rb
114
+ - lib/perspectives/context.rb
115
+ - lib/perspectives/controller_additions.rb
116
+ - lib/perspectives/forms.rb
117
+ - lib/perspectives/forms/base.rb
118
+ - lib/perspectives/forms/text_field.rb
119
+ - lib/perspectives/memoization.rb
120
+ - lib/perspectives/mustache_compiler.rb
121
+ - lib/perspectives/params.rb
122
+ - lib/perspectives/properties.rb
123
+ - lib/perspectives/railtie.rb
124
+ - lib/perspectives/rendering.rb
125
+ - lib/perspectives/responder.rb
126
+ - lib/perspectives/templating.rb
127
+ - lib/perspectives/version.rb
128
+ - lib/rails/projections.json
129
+ - lib/tasks/perspectives_tasks.rake
130
+ - spec/dummy/README.rdoc
131
+ - spec/dummy/Rakefile
132
+ - spec/dummy/app/assets/javascripts/application.js
133
+ - spec/dummy/app/assets/stylesheets/application.css
134
+ - spec/dummy/app/controllers/application_controller.rb
135
+ - spec/dummy/app/helpers/application_helper.rb
136
+ - spec/dummy/app/views/layouts/application.html.erb
137
+ - spec/dummy/bin/bundle
138
+ - spec/dummy/bin/rails
139
+ - spec/dummy/bin/rake
140
+ - spec/dummy/config.ru
141
+ - spec/dummy/config/application.rb
142
+ - spec/dummy/config/boot.rb
143
+ - spec/dummy/config/database.yml
144
+ - spec/dummy/config/environment.rb
145
+ - spec/dummy/config/environments/development.rb
146
+ - spec/dummy/config/environments/production.rb
147
+ - spec/dummy/config/environments/test.rb
148
+ - spec/dummy/config/initializers/backtrace_silencers.rb
149
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
150
+ - spec/dummy/config/initializers/inflections.rb
151
+ - spec/dummy/config/initializers/mime_types.rb
152
+ - spec/dummy/config/initializers/secret_token.rb
153
+ - spec/dummy/config/initializers/session_store.rb
154
+ - spec/dummy/config/initializers/wrap_parameters.rb
155
+ - spec/dummy/config/locales/en.yml
156
+ - spec/dummy/config/routes.rb
157
+ - spec/dummy/log/test.log
158
+ - spec/dummy/public/404.html
159
+ - spec/dummy/public/422.html
160
+ - spec/dummy/public/500.html
161
+ - spec/dummy/public/favicon.ico
162
+ - spec/lib/perspectives/properties_spec.rb
163
+ - spec/lib/perspectives/templating_spec.rb
164
+ - spec/lib/perspectives_spec.rb
165
+ - spec/mustaches/users/simple_info.mustache
166
+ - spec/rails_helper.rb
167
+ - spec/spec_helper.rb
168
+ - vendor/assets/javascripts/mustache-0.8.1.js
169
+ - vendor/assets/javascripts/perspectives.js
170
+ - vendor/assets/javascripts/perspectives/forms/text_field.mustache
171
+ - vendor/assets/javascripts/perspectives_views.js
172
+ homepage: https://github.com/a-warner/perspectives
173
+ licenses: []
174
+ metadata: {}
175
+ post_install_message:
176
+ rdoc_options: []
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ requirements: []
190
+ rubyforge_project:
191
+ rubygems_version: 2.2.2
192
+ signing_key:
193
+ specification_version: 4
194
+ summary: View objects and logicless templates
195
+ test_files:
196
+ - spec/dummy/app/assets/javascripts/application.js
197
+ - spec/dummy/app/assets/stylesheets/application.css
198
+ - spec/dummy/app/controllers/application_controller.rb
199
+ - spec/dummy/app/helpers/application_helper.rb
200
+ - spec/dummy/app/views/layouts/application.html.erb
201
+ - spec/dummy/bin/bundle
202
+ - spec/dummy/bin/rails
203
+ - spec/dummy/bin/rake
204
+ - spec/dummy/config/application.rb
205
+ - spec/dummy/config/boot.rb
206
+ - spec/dummy/config/database.yml
207
+ - spec/dummy/config/environment.rb
208
+ - spec/dummy/config/environments/development.rb
209
+ - spec/dummy/config/environments/production.rb
210
+ - spec/dummy/config/environments/test.rb
211
+ - spec/dummy/config/initializers/backtrace_silencers.rb
212
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
213
+ - spec/dummy/config/initializers/inflections.rb
214
+ - spec/dummy/config/initializers/mime_types.rb
215
+ - spec/dummy/config/initializers/secret_token.rb
216
+ - spec/dummy/config/initializers/session_store.rb
217
+ - spec/dummy/config/initializers/wrap_parameters.rb
218
+ - spec/dummy/config/locales/en.yml
219
+ - spec/dummy/config/routes.rb
220
+ - spec/dummy/config.ru
221
+ - spec/dummy/log/test.log
222
+ - spec/dummy/public/404.html
223
+ - spec/dummy/public/422.html
224
+ - spec/dummy/public/500.html
225
+ - spec/dummy/public/favicon.ico
226
+ - spec/dummy/Rakefile
227
+ - spec/dummy/README.rdoc
228
+ - spec/lib/perspectives/properties_spec.rb
229
+ - spec/lib/perspectives/templating_spec.rb
230
+ - spec/lib/perspectives_spec.rb
231
+ - spec/mustaches/users/simple_info.mustache
232
+ - spec/rails_helper.rb
233
+ - spec/spec_helper.rb