kindred 0.0.1 → 0.0.2

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: 98d0f43a8b8e5ab779ef396a9efc3c0fa3876075
4
- data.tar.gz: d4aaa6ad2ee96a901c1a8da7a02816d0b34301f5
3
+ metadata.gz: 1e03bccd44f384512d021142b9c05e55432834f2
4
+ data.tar.gz: 7a82f21f14b9fcfed70848620ae80e0505da041d
5
5
  SHA512:
6
- metadata.gz: c1bfe9d5dfb80638e4f3ff0cf5dbd9437d08449b1b83d09ddb975fa75d9185764ff0daaaf16ebd3410c696280a6b53388524847f0ead0cfb9daca62f9d78f62f
7
- data.tar.gz: 87f37d9b4ea4daf4c71bcb3b6a3cb14e3c7764b6f2b47fefa869bc43d3afaa1d490053cec5e79a91cd4144ede5dc3e2b22842f58392c984f48369085918d459a
6
+ metadata.gz: 76f08bed0689360d3765562774575bf006593e162499eb2ce5e6284f58e95ab0060c4202e84c8e0acc4c4172f5706f0243353ea09e7839d5e842b833162146b6
7
+ data.tar.gz: 99e97908c9dccf760e01ab940da6d4fa5357b34af60f1a93375f26502f2ab07ce1a677c88c92ca2f6deb4e783f219c66a07bd2f884c6861c0b806340572fc52e
data/README.md CHANGED
@@ -12,6 +12,7 @@ kindred
12
12
  | Homepage | [http://mfpiccolo.github.io/kindred][homepage] |
13
13
  | Documentation | [http://rdoc.info/github/mfpiccolo/kindred/frames][documentation] |
14
14
  | Issues | [https://github.com/mfpiccolo/kindred/issues][issues] |
15
+ | Conversation | [![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/mfpiccolo/kindred?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
15
16
 
16
17
  ## Description
17
18
  Kindred is an open source project that intends to optimize programmers happiness and productivity for client-heavy rails applications. Kindred aims to allow developers to create robust client side applications with minimal code while maintaining best practices and conventions.
@@ -38,12 +39,45 @@ Add `gem "kindred"` to gemfile
38
39
 
39
40
  Add `//= require kindred` to application.js manifest
40
41
 
41
- Change your asset pipeline configuration to prevent uglifying of JS class names:
42
+ If you are using uglifier you may need to add the following to assets.rb:
42
43
 
43
44
  ```ruby
44
45
  Rails.application.config.assets.js_compressor = Uglifier.new(mangle: false)
45
46
  ```
46
47
 
48
+ The following config needs to be abstracted to the gem or refactored but for now:
49
+
50
+ Add this configuration to application.html.erb:
51
+
52
+ ```
53
+ <%= kindred_model_data %>
54
+ <%= content_for :kindred_script %>
55
+ <script type="text/javascript">
56
+ App.BaseUrl = '<%= "#{request.protocol}#{request.host_with_port}" %>';
57
+ </script>
58
+ ```
59
+
60
+ In the controller that you will be rendering kindred models you need to add:
61
+
62
+ ```
63
+ ...
64
+ after_action :setup_kindred
65
+
66
+ helper_method :js
67
+ ...
68
+ ```
69
+
70
+ ```
71
+ def setup_kindred
72
+ view_context.content_for :kindred_script do
73
+ js(js_class: "App.Template", function: "set_templates", args: @kindred_hash, rendered: true)
74
+ end
75
+ end
76
+ ```
77
+
78
+ One again, much of this configuration will be removed in the future but is neccesary at the moment.
79
+
80
+
47
81
  ## Demo
48
82
 
49
83
  If you would like to see kindred in action check out [kindred-demo](https://kindred-demo.herokuapp.com/invoices/1/edit).
@@ -57,12 +91,12 @@ The `#template` method takes the following keyword arguments:
57
91
 
58
92
  `collection:` Collection of json serializable ruby objects
59
93
 
60
- `target:` String of the data-target attribute wrapper
94
+ `target_uuid:` String of the uuid for the data-target-uuid attribute wrapper
61
95
 
62
96
  `&block` In the block pass html that will be used for that model
63
97
 
64
98
  ```HTML
65
- <div data-target="line-item">
99
+ <div <%= target @invoice %>>
66
100
  <%= template(collection: @line_items, target: "line-item", model: "line_item") do %>
67
101
  <tr>
68
102
  <td><%= k_text_field_tag(:line_item, :description) %></td>
@@ -85,13 +119,31 @@ You could then get access to the collection or the template by using those prope
85
119
 
86
120
  `li_info.collection` would return the json collection
87
121
 
122
+ ###Interpolation
123
+ Inside of templates, it is possible to interpolate dynamic data by using the {{}} syntax.
124
+
125
+ For example, you could interpolate the id of the line item by doing the following
126
+ ```HTML
127
+ <div <%= target @invoice %>>
128
+ <%= template(collection: @line_items, target: "line-item", model: "line_item") do %>
129
+ <tr>
130
+ <td>{{line_item.id}}</td>
131
+ <td><%= k_text_field_tag(:line_item, :description) %></td>
132
+ <td><%= k_text_field_tag(:line_item, :qty) %></td>
133
+ <td><%= k_text_field_tag(:line_item, :price_cents) %></td>
134
+ <td><%= k_check_box_tag(:line_item, :complete) %></td>
135
+ </tr>
136
+ <% end %>
137
+ </div>
138
+ ```
139
+
88
140
  ###Controllers
89
141
  In kindred, javascript controllers are a client side augmentation of your ruby controllers. They are just client side code that gets run on page load.
90
142
 
91
143
  ```coffeescript
92
- class this.InvoicesController
93
- @edit: ->
94
- console.log "Run this on invoice edit view"
144
+ class this.InvoicesController
145
+ @edit: ->
146
+ console.log "Run this on invoice edit view"
95
147
  ```
96
148
 
97
149
  To ensure that this code is run on the client side call the js method from your view or controller:
@@ -25,9 +25,10 @@ class App.ActivePage
25
25
  if select.length
26
26
  select.val(value)
27
27
 
28
- span = $template.find("span[data-attr='" + key + "']")
29
- if span.length
30
- span.html(value)
28
+ display = $template.find("div[data-attr='" + key + "'], span[data-attr='" + key + "'], p[data-attr='" + key + "']")
29
+ if display.length
30
+ new_display = display.html(value)
31
+ display.replaceWith(new_display)
31
32
 
32
33
  @_append_data_model_to_page()
33
34
 
@@ -40,6 +41,11 @@ class App.ActivePage
40
41
  $.each @attributes, (attr, val) =>
41
42
  $("[data-k-uuid='" + @uuid + "'][data-attr='" + attr + "']").val(val)
42
43
 
44
+ update_displays_on_page: ->
45
+ $.each @attributes, (attr, val) =>
46
+ # TODO make this work with span and p
47
+ $("div[data-k-uuid='" + @uuid + "'][data-attr='" + attr + "'], span[data-k-uuid='" + @uuid + "'][data-attr='" + attr + "'], p[data-k-uuid='" + @uuid + "'][data-attr='" + attr + "']").html(val)
48
+
43
49
  dirty_from_page: ->
44
50
  dirty = []
45
51
  $.each $("input[data-k-uuid='" + @uuid + "'], select[data-k-uuid='" + @uuid + "']"), (i, input) =>
@@ -65,9 +71,9 @@ class App.ActivePage
65
71
  else
66
72
  @set $input.data("attr"), $input.val()
67
73
 
68
- model_data = $("[data-kindred-model]").find("[data-k-uuid='" + @uuid + "']")
69
- if !isNaN(parseFloat(model_data.data("id"))) && isFinite(model_data.data("id"))
70
- @id = model_data.data("id")
74
+ model_data = $("[data-kindred-model]").find("[data-k-uuid='" + @uuid + "']")
75
+ if !isNaN(parseFloat(model_data.data("id"))) && isFinite(model_data.data("id"))
76
+ @id = model_data.data("id")
71
77
 
72
78
  $("select[data-k-uuid='" + @uuid + "']").each (i, select) =>
73
79
  @set $(select).data("attr"), $(select).val()
@@ -101,7 +101,9 @@ class App.Base extends App.VirtualClass App.ActivePage, App.Setup
101
101
  @assign_attributes(data)
102
102
  @_clear_errors()
103
103
  @_update_data_vals_on_page()
104
+ @update_vals_on_page()
104
105
  @_setup_interpolated_vars()
106
+ @update_displays_on_page()
105
107
 
106
108
  #overridable hook
107
109
  after_save_error: (xhr) ->
@@ -1,10 +1,6 @@
1
1
  module TemplateHelper
2
2
  def template(model: nil, collection: nil, target_uuid: nil, &block)
3
- model_name = if collection.present?
4
- ActiveModel::Naming.singular(collection.first)
5
- else
6
- model
7
- end
3
+ model_name = model
8
4
 
9
5
  @kindred_hash ||= {}
10
6
  @kindred_hash.merge!({
@@ -23,7 +19,7 @@ module TemplateHelper
23
19
  end
24
20
 
25
21
  def k_content_tag(element, attribute = nil, object = nil, content_or_options_with_block = nil, options = {}, escape = true, &block)
26
- content_tag(element, nil, options.merge({data: { attr: attribute, k_uuid: k_try(object, :uuid), val: ""} }))
22
+ content_tag(element, nil, options.merge({data: { attr: attribute, k_uuid: k_try(object, :uuid), val: object.try(attribute.to_sym)} }))
27
23
  end
28
24
 
29
25
  def k_hidden_field_tag(name, value=nil, object=nil, delegate_to=nil, options = {})
data/kindred-0.0.1.gem ADDED
Binary file
@@ -1,3 +1,3 @@
1
1
  module Kindred
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kindred
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Piccolo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-06 00:00:00.000000000 Z
11
+ date: 2015-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -91,6 +91,7 @@ files:
91
91
  - app/assets/javascripts/utilities/uuid.coffee
92
92
  - app/assets/javascripts/utilities/virtual_class.coffee
93
93
  - app/helpers/template_helper.rb
94
+ - kindred-0.0.1.gem
94
95
  - kindred.gemspec
95
96
  - lib/kindred.rb
96
97
  - lib/kindred/engine.rb
@@ -115,9 +116,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
116
  version: '0'
116
117
  requirements: []
117
118
  rubyforge_project:
118
- rubygems_version: 2.2.2
119
+ rubygems_version: 2.4.3
119
120
  signing_key:
120
121
  specification_version: 4
121
122
  summary: ''
122
123
  test_files: []
123
- has_rdoc: