angular_sprinkles 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9f6308b16a728b1c5e29241e0e94be0eec1d3735
4
+ data.tar.gz: c1f09fbcc331e60afe3860ea39283b990e4e21dd
5
+ SHA512:
6
+ metadata.gz: 7831c173521e159f22de88877f5796f65740dafb22578a3ec0bda94a7431fa7975a669093f1d06180c022b31c0b9ed808e83150a3c50cd1581b2deca35653fb5
7
+ data.tar.gz: 3b5cd766296c41a6ea3f08008e51356ca6470aad47b05b931339f1f808bcd4a8412d0723738eeea36d26122ee687e2ddf85b57caa4b7b01973e21882969ed371
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rails"
4
+ gem "actionview"
5
+ gem "angularjs-rails" # must be greater than 1.2
6
+
7
+ group :development do
8
+ gem "rspec"
9
+ gem "rdoc"
10
+ gem "bundler"
11
+ gem "jeweler"
12
+ gem "simplecov"
13
+ gem "byebug"
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,156 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ actionmailer (4.1.4)
5
+ actionpack (= 4.1.4)
6
+ actionview (= 4.1.4)
7
+ mail (~> 2.5.4)
8
+ actionpack (4.1.4)
9
+ actionview (= 4.1.4)
10
+ activesupport (= 4.1.4)
11
+ rack (~> 1.5.2)
12
+ rack-test (~> 0.6.2)
13
+ actionview (4.1.4)
14
+ activesupport (= 4.1.4)
15
+ builder (~> 3.1)
16
+ erubis (~> 2.7.0)
17
+ activemodel (4.1.4)
18
+ activesupport (= 4.1.4)
19
+ builder (~> 3.1)
20
+ activerecord (4.1.4)
21
+ activemodel (= 4.1.4)
22
+ activesupport (= 4.1.4)
23
+ arel (~> 5.0.0)
24
+ activesupport (4.1.4)
25
+ i18n (~> 0.6, >= 0.6.9)
26
+ json (~> 1.7, >= 1.7.7)
27
+ minitest (~> 5.1)
28
+ thread_safe (~> 0.1)
29
+ tzinfo (~> 1.1)
30
+ addressable (2.3.6)
31
+ angularjs-rails (1.2.21)
32
+ arel (5.0.1.20140414130214)
33
+ builder (3.2.2)
34
+ byebug (3.2.0)
35
+ columnize (~> 0.8)
36
+ debugger-linecache (~> 1.2)
37
+ columnize (0.8.9)
38
+ debugger-linecache (1.2.0)
39
+ descendants_tracker (0.0.4)
40
+ thread_safe (~> 0.3, >= 0.3.1)
41
+ diff-lcs (1.2.5)
42
+ docile (1.1.5)
43
+ erubis (2.7.0)
44
+ faraday (0.9.0)
45
+ multipart-post (>= 1.2, < 3)
46
+ git (1.2.8)
47
+ github_api (0.12.1)
48
+ addressable (~> 2.3)
49
+ descendants_tracker (~> 0.0.4)
50
+ faraday (~> 0.8, < 0.10)
51
+ hashie (>= 3.2)
52
+ multi_json (>= 1.7.5, < 2.0)
53
+ nokogiri (~> 1.6.3)
54
+ oauth2
55
+ hashie (3.2.0)
56
+ highline (1.6.21)
57
+ hike (1.2.3)
58
+ i18n (0.6.11)
59
+ jeweler (2.0.1)
60
+ builder
61
+ bundler (>= 1.0)
62
+ git (>= 1.2.5)
63
+ github_api
64
+ highline (>= 1.6.15)
65
+ nokogiri (>= 1.5.10)
66
+ rake
67
+ rdoc
68
+ json (1.8.1)
69
+ jwt (1.0.0)
70
+ mail (2.5.4)
71
+ mime-types (~> 1.16)
72
+ treetop (~> 1.4.8)
73
+ mime-types (1.25.1)
74
+ mini_portile (0.6.0)
75
+ minitest (5.4.0)
76
+ multi_json (1.10.1)
77
+ multi_xml (0.5.5)
78
+ multipart-post (2.0.0)
79
+ nokogiri (1.6.3.1)
80
+ mini_portile (= 0.6.0)
81
+ oauth2 (1.0.0)
82
+ faraday (>= 0.8, < 0.10)
83
+ jwt (~> 1.0)
84
+ multi_json (~> 1.3)
85
+ multi_xml (~> 0.5)
86
+ rack (~> 1.2)
87
+ polyglot (0.3.5)
88
+ rack (1.5.2)
89
+ rack-test (0.6.2)
90
+ rack (>= 1.0)
91
+ rails (4.1.4)
92
+ actionmailer (= 4.1.4)
93
+ actionpack (= 4.1.4)
94
+ actionview (= 4.1.4)
95
+ activemodel (= 4.1.4)
96
+ activerecord (= 4.1.4)
97
+ activesupport (= 4.1.4)
98
+ bundler (>= 1.3.0, < 2.0)
99
+ railties (= 4.1.4)
100
+ sprockets-rails (~> 2.0)
101
+ railties (4.1.4)
102
+ actionpack (= 4.1.4)
103
+ activesupport (= 4.1.4)
104
+ rake (>= 0.8.7)
105
+ thor (>= 0.18.1, < 2.0)
106
+ rake (10.3.2)
107
+ rdoc (4.1.1)
108
+ json (~> 1.4)
109
+ rspec (3.0.0)
110
+ rspec-core (~> 3.0.0)
111
+ rspec-expectations (~> 3.0.0)
112
+ rspec-mocks (~> 3.0.0)
113
+ rspec-core (3.0.4)
114
+ rspec-support (~> 3.0.0)
115
+ rspec-expectations (3.0.4)
116
+ diff-lcs (>= 1.2.0, < 2.0)
117
+ rspec-support (~> 3.0.0)
118
+ rspec-mocks (3.0.4)
119
+ rspec-support (~> 3.0.0)
120
+ rspec-support (3.0.4)
121
+ simplecov (0.9.0)
122
+ docile (~> 1.1.0)
123
+ multi_json
124
+ simplecov-html (~> 0.8.0)
125
+ simplecov-html (0.8.0)
126
+ sprockets (2.12.1)
127
+ hike (~> 1.2)
128
+ multi_json (~> 1.0)
129
+ rack (~> 1.0)
130
+ tilt (~> 1.1, != 1.3.0)
131
+ sprockets-rails (2.1.3)
132
+ actionpack (>= 3.0)
133
+ activesupport (>= 3.0)
134
+ sprockets (~> 2.8)
135
+ thor (0.19.1)
136
+ thread_safe (0.3.4)
137
+ tilt (1.4.1)
138
+ treetop (1.4.15)
139
+ polyglot
140
+ polyglot (>= 0.3.1)
141
+ tzinfo (1.2.2)
142
+ thread_safe (~> 0.1)
143
+
144
+ PLATFORMS
145
+ ruby
146
+
147
+ DEPENDENCIES
148
+ actionview
149
+ angularjs-rails
150
+ bundler
151
+ byebug
152
+ jeweler
153
+ rails
154
+ rdoc
155
+ rspec
156
+ simplecov
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 Gabe Scholz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,153 @@
1
+ # Angular Sprinkles
2
+
3
+ Sprinkles is a Ruby on Rails gem for developers who want to use Angular's two most powerful features, two-way data binding and
4
+ custom directives, without all of the regular setup required for a typical Angular-based application.
5
+
6
+ Sprinkles injects just enough JavaScript onto your page to make you dangerous. It is intended to be used by developers who just
7
+ want a sprinkle of Angular instead of a full-blown application.
8
+
9
+ ## Setup
10
+
11
+ Add Angular and Sprinkles to your `Gemfile`
12
+
13
+ ```ruby
14
+ # Gemfile
15
+
16
+ gem 'angularjs-rails'
17
+ gem 'angular_sprinkles'
18
+ ```
19
+
20
+ Add a yield method for your sprinkles at the bottom of your body tag
21
+
22
+ ```erb
23
+ <%=# app/views/layouts/application.html.erb %>
24
+ <body>
25
+
26
+ <%= yield %>
27
+
28
+ <%= yield :sprinkles %>
29
+ </body>
30
+ ```
31
+
32
+ Include Angular and Sprinkles into your `application.js`
33
+
34
+ ```js
35
+ // app/assets/javascripts/application.js
36
+
37
+ //= require angular
38
+ //= require angular_sprinkles
39
+ //= require_tree .
40
+ ```
41
+
42
+ That's it! You are now read to begin using Sprinkles in your application. There is no need to create an application module or
43
+ controller. Sprinkles dynamically generates this for you.
44
+
45
+ ## Data binding
46
+
47
+ Two-way data binding with Sprinkles is easy. We can use the `bind` view helper to create a binding between two elements
48
+
49
+ ```erb
50
+ <%=# some view %>
51
+
52
+ <span ng-bind="<%= bind(:user) %>"></span>
53
+ <input type="text" ng-model="<%= bind(:user) %>" />
54
+ ```
55
+
56
+ We can also create nested data structures and Sprinkles handles creating parent objects for us
57
+
58
+ ```erb
59
+ <%=# some view %>
60
+
61
+ Bind the entire object: <span ng-bind="<%= bind(:user) %>"></span>
62
+
63
+ Full Name: <span ng-bind="<%= bind(:user, :first_name) %> + ' ' + <%= bind(:user, :last_name) %>"></span>
64
+ First Name: <input type="text" ng-model="<%= bind(:user, :first_name) %>" />
65
+ Last Name: <input type="text" ng-model="<%= bind(:user, :last_name) %>" />
66
+ ```
67
+
68
+ This is okay, but it would be nice to inject some data that already exists. We will use the `bindable` controller helper to wrap our objects
69
+
70
+ ```ruby
71
+ class UserController < ApplicationController
72
+ include AngularSprinkles::Controller
73
+
74
+ def show
75
+ @user = bindable(User.find(params[:id]))
76
+ end
77
+ ```
78
+
79
+ Our user is now also able to use `bind`
80
+
81
+ ```erb
82
+ <%=# some view %>
83
+
84
+ Bind the entire object: <span ng-bind="<%= @user.bind %>"></span>
85
+
86
+ Full Name: <span ng-bind="<%= @user.bind(:first_name) %> + ' ' + <%= @user.bind(:last_name) %>"></span>
87
+ First Name: <input type="text" ng-model="<%= @user.bind(:first_name) %>" />
88
+ Last Name: <input type="text" ng-model="<%= @user.bind(:last_name) %>" />
89
+ ```
90
+
91
+ We've got two-way data binding of persisted data without writing a single line of javascript!
92
+
93
+ ## Custom Directives
94
+
95
+ Sprinkles also comes packaged with a helper for instantiating custom directives.
96
+
97
+ In order to write custom directives, you must add them to the sprinkles module which is attached to the global `sprinkles` variable.
98
+ Let's create an element that blinks some text.
99
+
100
+ ```js
101
+ // some js file
102
+
103
+ sprinkles.directive('blink', function ($interval) {
104
+ return {
105
+ restrict: 'A',
106
+ scope: {
107
+ interval: '=',
108
+ text: '='
109
+ },
110
+ template: '<span>{{text}}</span>',
111
+ link: function (scope, el) {
112
+ var opacity = 1;
113
+
114
+ scope.text = scope.text || 'Hello World!';
115
+ scope.interval = scope.interval || 1000;
116
+
117
+ $interval(function () {
118
+ el.css({ opacity: opacity });
119
+ opacity = -opacity + 1;
120
+ }, scope.interval);
121
+ }
122
+ }
123
+ });
124
+ ```
125
+
126
+ ```erb
127
+ <%=# some view %>
128
+
129
+ <%= directive(:blink, { interval: 250, text: 'Blink Me!' }) %>
130
+ ```
131
+
132
+ "Blink Me!" will now flash on the screen. We can also combine this directive with the `bind` helper so that we can change the text on the fly
133
+
134
+ ```erb
135
+ <%=# some view %>
136
+
137
+ <%= directive(:blink, { interval: 250, text: bind(:blink_text) }) %>
138
+ <input type="text" ng-model="<%= bind(:blink_text) %>" />
139
+ ```
140
+
141
+ ## Including additional modules
142
+
143
+ Adding additional modules is just a matter of appending them to `sprinkles.requires`. This is already a feature of Angular and not Sprinkles
144
+
145
+ ```js
146
+ // some js file
147
+
148
+ sprinkles.requires.push('ui.router');
149
+ ```
150
+
151
+ ## Copyright
152
+
153
+ Copyright (c) 2014 Brewhouse Software. See LICENSE.txt for further details.
data/Rakefile ADDED
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "angular_sprinkles"
18
+ gem.homepage = "http://github.com/BrewhouseTeam/angular_sprinkles"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Add few sprinkles of AngularJS to your Rails App}
21
+ gem.description = %Q{Add few sprinkles of AngularJS to your Rails App}
22
+ gem.email = "gabe@brewhouse.io"
23
+ gem.authors = ["Gabe Scholz"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ desc "Code coverage detail"
35
+ task :simplecov do
36
+ ENV['COVERAGE'] = "true"
37
+ Rake::Task['spec'].execute
38
+ end
39
+
40
+ task :default => :spec
41
+
42
+ require 'rdoc/task'
43
+ Rake::RDocTask.new do |rdoc|
44
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
45
+
46
+ rdoc.rdoc_dir = 'rdoc'
47
+ rdoc.title = "angular_sprinkles #{version}"
48
+ rdoc.rdoc_files.include('README*')
49
+ rdoc.rdoc_files.include('lib/**/*.rb')
50
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,94 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: angular_sprinkles 0.0.1 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "angular_sprinkles"
9
+ s.version = "0.0.1"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["Gabe Scholz"]
14
+ s.date = "2014-08-22"
15
+ s.description = "Add few sprinkles of AngularJS to your Rails App"
16
+ s.email = "gabe@brewhouse.io"
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".rspec",
24
+ "Gemfile",
25
+ "Gemfile.lock",
26
+ "LICENSE.txt",
27
+ "README.md",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "angular_sprinkles.gemspec",
31
+ "app/assets/javascripts/angular_sprinkles.js.erb",
32
+ "lib/angular_sprinkles.rb",
33
+ "lib/angular_sprinkles/controller.rb",
34
+ "lib/angular_sprinkles/data/bind.rb",
35
+ "lib/angular_sprinkles/decorators.rb",
36
+ "lib/angular_sprinkles/decorators/bind_decorator.rb",
37
+ "lib/angular_sprinkles/engine.rb",
38
+ "lib/angular_sprinkles/helpers.rb",
39
+ "lib/angular_sprinkles/helpers/bind_helper.rb",
40
+ "lib/angular_sprinkles/helpers/directive_helper.rb",
41
+ "lib/angular_sprinkles/mixins/initializable.rb",
42
+ "lib/angular_sprinkles/mixins/js_transformable.rb",
43
+ "lib/angular_sprinkles/railtie.rb",
44
+ "spec/controller_spec.rb",
45
+ "spec/data/bind_spec.rb",
46
+ "spec/decorators/bind_decorator_spec.rb",
47
+ "spec/helpers/bind_helper_spec.rb",
48
+ "spec/helpers/directive_helper_spec.rb",
49
+ "spec/mixins/initializable_spec.rb",
50
+ "spec/mixins/js_transformable_spec.rb",
51
+ "spec/spec_helper.rb"
52
+ ]
53
+ s.homepage = "http://github.com/BrewhouseTeam/angular_sprinkles"
54
+ s.licenses = ["MIT"]
55
+ s.rubygems_version = "2.4.1"
56
+ s.summary = "Add few sprinkles of AngularJS to your Rails App"
57
+
58
+ if s.respond_to? :specification_version then
59
+ s.specification_version = 4
60
+
61
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
62
+ s.add_runtime_dependency(%q<rails>, [">= 0"])
63
+ s.add_runtime_dependency(%q<actionview>, [">= 0"])
64
+ s.add_runtime_dependency(%q<angularjs-rails>, [">= 0"])
65
+ s.add_development_dependency(%q<rspec>, [">= 0"])
66
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
67
+ s.add_development_dependency(%q<bundler>, [">= 0"])
68
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
69
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
70
+ s.add_development_dependency(%q<byebug>, [">= 0"])
71
+ else
72
+ s.add_dependency(%q<rails>, [">= 0"])
73
+ s.add_dependency(%q<actionview>, [">= 0"])
74
+ s.add_dependency(%q<angularjs-rails>, [">= 0"])
75
+ s.add_dependency(%q<rspec>, [">= 0"])
76
+ s.add_dependency(%q<rdoc>, [">= 0"])
77
+ s.add_dependency(%q<bundler>, [">= 0"])
78
+ s.add_dependency(%q<jeweler>, [">= 0"])
79
+ s.add_dependency(%q<simplecov>, [">= 0"])
80
+ s.add_dependency(%q<byebug>, [">= 0"])
81
+ end
82
+ else
83
+ s.add_dependency(%q<rails>, [">= 0"])
84
+ s.add_dependency(%q<actionview>, [">= 0"])
85
+ s.add_dependency(%q<angularjs-rails>, [">= 0"])
86
+ s.add_dependency(%q<rspec>, [">= 0"])
87
+ s.add_dependency(%q<rdoc>, [">= 0"])
88
+ s.add_dependency(%q<bundler>, [">= 0"])
89
+ s.add_dependency(%q<jeweler>, [">= 0"])
90
+ s.add_dependency(%q<simplecov>, [">= 0"])
91
+ s.add_dependency(%q<byebug>, [">= 0"])
92
+ end
93
+ end
94
+
@@ -0,0 +1,18 @@
1
+ //= require angular
2
+
3
+ window.sprinkles = angular.module('<%= AngularSprinkles::APP_NAME %>', []);
4
+
5
+ window.onload = function () {
6
+ var angular = window.angular,
7
+ app = angular.module('<%= AngularSprinkles::APP_NAME %>'),
8
+ doc = document.documentElement,
9
+ ctrlName = (doc.attributes['ng-controller'] || doc.attributes['data-ng-controller']) || 'Ctrl';
10
+
11
+ ctrlName = ctrlName.split(' as ')[0];
12
+
13
+ <%= AngularSprinkles::CONTROLLER_FN %> = <%= AngularSprinkles::CONTROLLER_FN %> || function(){};
14
+ app.controller(ctrlName, <%= AngularSprinkles::CONTROLLER_FN %>);
15
+ doc.setAttribute('data-ng-controller', ctrlName + ' as <%= AngularSprinkles::CONTROLLER_NAME %>');
16
+
17
+ angular.bootstrap(doc, [app.name]);
18
+ };
@@ -0,0 +1,61 @@
1
+ require 'angular_sprinkles/mixins/js_transformable'
2
+ require 'angular_sprinkles/mixins/initializable'
3
+ require 'angular_sprinkles/decorators/bind_decorator'
4
+
5
+ module AngularSprinkles
6
+ module Controller
7
+ include AngularSprinkles::Mixins::JsTransformable
8
+ include AngularSprinkles::Mixins::Initializable
9
+
10
+ def bindable(object)
11
+ klass = object.class
12
+ key = "#{klass}_#{inc_sprinkles_counter(klass)}"
13
+ assignable(key => object)
14
+ AngularSprinkles::Decorators::Bind.new(object, key, method(:view_context))
15
+ end
16
+
17
+ def assignable(hash)
18
+ raise TypeError unless hash.is_a?(Hash)
19
+ declare_js_controller_prototype unless app_initialized?
20
+ preload_to_page(hash)
21
+ end
22
+
23
+ def view_context
24
+ @_sprinkles_view_context ||= super.tap do |view|
25
+ if sprinkles_content.any?
26
+ content = view.content_tag(:script, (sprinkles_content.join(";\n") + ';').html_safe)
27
+ view.content_for(:sprinkles, content)
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def sprinkles_counter
35
+ @_sprinkles_counter ||= {}
36
+ end
37
+
38
+ def inc_sprinkles_counter(klass)
39
+ sprinkles_counter[klass] ||= 0
40
+ sprinkles_counter[klass] += 1
41
+ end
42
+
43
+ def declare_js_controller_prototype
44
+ sprinkles_content.push(AngularSprinkles::CONSTRUCTOR_DEFINITION)
45
+ end
46
+
47
+ def preload_to_page(hash)
48
+ hash.each do |var_name, value|
49
+ if !var_initialized?(var_name)
50
+ str = set_prototype_variable(var_name, value)
51
+ sprinkles_content.push(str)
52
+ end
53
+ end
54
+ sprinkles_content
55
+ end
56
+
57
+ def sprinkles_content
58
+ @_sprinkles_content ||= []
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,18 @@
1
+ require 'angular_sprinkles/mixins/js_transformable'
2
+
3
+ module AngularSprinkles
4
+ module Data
5
+ class Bind
6
+ include Mixins::JsTransformable
7
+
8
+ def initialize(*strs)
9
+ @strs = strs.flatten.compact
10
+ end
11
+
12
+ def to_json
13
+ to_ctrl_variable(@strs.join('.'))
14
+ end
15
+ alias_method :to_s, :to_json
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,53 @@
1
+ module AngularSprinkles
2
+ module Decorators
3
+ class Bind < SimpleDelegator
4
+ def initialize(object, key, context_proc)
5
+ @_sprinkles_bind_wrapper = Wrapper.new(object, key, context_proc)
6
+ super(object)
7
+ end
8
+
9
+ def bind(_method = nil)
10
+ @_sprinkles_bind_wrapper.bind(_method)
11
+ end
12
+
13
+ private
14
+
15
+ class Wrapper
16
+ # create BindWrapper so that methods and variables don't pollute
17
+ # the object being wrapped by Bind
18
+
19
+ attr_reader :_object, :key, :context_proc
20
+
21
+ def initialize(object, key, context_proc)
22
+ @_object, @key, @context_proc = object, key, context_proc
23
+ end
24
+
25
+ def bind(_method = nil)
26
+ if _method.present? && !context.var_initialized?([key, _method])
27
+ set_prototype_variable_and_yield(_method)
28
+ end
29
+
30
+ context.bind(key, _method)
31
+ end
32
+
33
+ private
34
+
35
+ def context
36
+ context_proc.call
37
+ end
38
+
39
+ def set_prototype_variable_and_yield(_method)
40
+ var = [key, _method].join('.')
41
+ str = context.set_prototype_variable(var, _object.send(_method))
42
+ yield_to_sprinkles("#{str};")
43
+ end
44
+
45
+ def yield_to_sprinkles(content)
46
+ context.content_for(:sprinkles) do
47
+ context.content_tag(:script, content.html_safe)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,6 @@
1
+ module AngularSprinkles
2
+ module Decorators
3
+ end
4
+ end
5
+
6
+ require 'angular_sprinkles/decorators/bind_decorator'
@@ -0,0 +1,6 @@
1
+ require 'rails'
2
+
3
+ module AngularSprinkles
4
+ class Engine < ::Rails::Engine
5
+ end
6
+ end