jibe 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1934e5d8e1c100412827dd32a8028beeafd68f4d
4
- data.tar.gz: ca820173bb5bcf6d1e108165185fc4fd628036d7
3
+ metadata.gz: 5bdd84d7feae05580d1c69afcc28d953030ec5f8
4
+ data.tar.gz: 10308c8778b8996cfed0f8a5de829bce160016a1
5
5
  SHA512:
6
- metadata.gz: e6862898be25bd60e735de6aaa75d495a174972a87038ea25c8a7d243ec2de6bd15da7bc29207d9ad87482ea58820fa67323be63a4d1b9df21c090ffc877e4b1
7
- data.tar.gz: 6ba56ba5725a7d1f352749d7e31be75e451672498122572d6d4a3d139109dcb29729e6cd1cc0df6b140b45ddd69eb636ba7797eb1f014888a7c8b1ea1dd3faf5
6
+ metadata.gz: 5e8c3b2caa25986d945356b19f4b634cbf0010655b1af33b1484c537cdb8fe2f14c323ff7d1f7f46b6203d98f6ad503a1cf1ce43bb260891ccce418750c9ced2
7
+ data.tar.gz: bba8e8d2f366636f09b2bfc6038ac224af5b95121a137fb13c804000221d6bc5f3132ab2e0fcc57f396d02461dc3e79c596f7bcfd5bd0cc754c6a76755b94ff5
data/README.md CHANGED
@@ -6,11 +6,21 @@ Jibe keeps simple data 'n sync with very little setup. For now, it relies on Pus
6
6
 
7
7
  First, Add `gem 'jibe'` to your application's Gemfile and `bundle`.
8
8
 
9
- Then, [Set up Pusher.](https://github.com/pusher/pusher-gem) You'll also need to throw your pusher key into a meta tag named `pusher-key`.
9
+ Then, [Set up Pusher.](https://github.com/pusher/pusher-gem)
10
+
11
+ You'll need to throw your pusher key into a meta tag named `pusher-key`:
12
+
13
+ ```
14
+ <%= tag :meta, name: "pusher-key", content: CONFIG["pusher_key"] %>
15
+ ```
10
16
 
11
17
  Add `//= require jibe` to your `application.js` file.
12
18
 
13
- Add `jibe` to your model.
19
+
20
+ ## Usage
21
+
22
+ With only 2 1-word tweaks, your views will stay in sync!
23
+ Add `jibe` to the model you'd like to stay in sync. In our case, `app/models/comment.rb`.
14
24
 
15
25
  ```
16
26
  class Comment < ActiveRecord::Base
@@ -18,7 +28,7 @@ class Comment < ActiveRecord::Base
18
28
  end
19
29
  ```
20
30
 
21
- Replace a collection render call:
31
+ Replace a collection render call. In our case, its in `app/views/comments/index.html.erb`.
22
32
 
23
33
  ```
24
34
  <table>
@@ -26,7 +36,7 @@ Replace a collection render call:
26
36
  </table>
27
37
  ```
28
38
 
29
- with:
39
+ should be replaced with:
30
40
 
31
41
  ```
32
42
  <table>
@@ -41,20 +51,21 @@ Now, all those `@comments` will stay in sync. At this point, its probably worth
41
51
  ```
42
52
  <%=
43
53
  jibe @comments,
44
- strategy: "prepend", # by default, new tasks are appended
45
- scope: "completed", # useful in conjunction with JS callbacks
46
- restrict_to: [@folder, current_user] # limit access
54
+ strategy: "append", # where should jibe place new records (prepend/append)
55
+ scope: [@post, "completed"], # checks AR objects against *_id attrs, strings are useful in conjunction with JS callbacks
56
+ silent: true # don't manipulate the DOM
47
57
  %>
48
58
  ```
49
59
 
50
- You can hijack the `beforeCreate`, `afterCreate`, `beforeUpdate`, `afterUpdate`, `beforeDestroy`, `afterDestroy` events. This is helpful for transitions.
60
+ You can control the way the DOM is updated by using the `beforeCreate`, `afterCreate`, `beforeUpdate`, `afterUpdate`, `beforeDestroy`, `afterDestroy` events. This is helpful for transitions.
51
61
 
52
62
  ```
53
63
  Jibe.events["comments"] =
54
64
  beforeCreate: (partial, data, scope) ->
55
65
  # partial = the DOM node
56
66
  # data = the model's attributes (override with jibe_data method in your model)
57
- # scope = an optional scope based on the jibe tag in your view
67
+ # scope = based on the jibe tag in your view
68
+ # Jibe.inScope("completed", scope) is useful to check if the record is within the scope
58
69
 
59
70
  ```
60
71
 
@@ -8,39 +8,62 @@ Jibe.tearDown = ->
8
8
 
9
9
  Jibe.initialized = false
10
10
 
11
+ Jibe.inScope = (test, scope) ->
12
+ !$.inArray test, scope == -1
13
+
14
+ Jibe.compareScopeWithData = (scope, data) ->
15
+ if !scope.length
16
+ in_scope = true
17
+ else
18
+ scope_passes = 0
19
+
20
+ $.each scope, (index, s) ->
21
+ s_split = s.split("=")
22
+ if s_split.length
23
+ if "#{data.data[s_split[0]]}" == "#{s_split[1]}" || "#{data.data.data[s_split[0]]}" == "#{s_split[1]}"
24
+ scope_passes += 1
25
+ else
26
+ scope_passes += 1
27
+
28
+ in_scope = scope_passes == scope.length
29
+
30
+ in_scope
31
+
11
32
  Jibe.init = ->
12
33
  unless Jibe.initialized
13
34
  Jibe.initialized = true
14
35
  pusher_key = $("meta[name='pusher-key']").attr("content")
15
36
  Jibe.pusher = new Pusher pusher_key
16
- channel = Jibe.pusher.subscribe "Jibe"
37
+ channel = Jibe.pusher.subscribe "jibe"
17
38
 
18
39
  channel.bind "event", (data) ->
19
40
  $("script[type='x-jibe'][data-resource='#{data.collection}']").each ->
20
- scope = $(this).data("scope")
41
+ scope = if typeof $(this).data("scope") == "undefined" then [] else $(this).data("scope").split(" ")
21
42
  wrapper = $(this).parent()
22
43
  before_hook_name = "before#{data.action_capitalized}"
23
44
  after_hook_name = "after#{data.action_capitalized}"
24
45
  partial = $(data.partial)
25
46
  on_page = $(this).parent().find(".#{data.dom_id}, ##{data.dom_id}, .#{data.model}[data-id='#{data.id}']")
26
47
  has_events = typeof Jibe.events[data.collection] != "undefined"
48
+ in_scope = Jibe.compareScopeWithData scope, data
27
49
 
28
- if has_events && typeof Jibe.events[data.collection][before_hook_name] == "function"
29
- Jibe.events[data.collection][before_hook_name].call null, partial, data.data, scope
30
-
31
- if data.action_name == "create"
32
- if $(this).data("strategy") == "prepend"
33
- partial.prependTo wrapper
34
- else
35
- partial.appendTo wrapper
36
- else if data.action_name == "update"
37
- on_page.replaceWith partial
50
+ if in_scope
51
+ if has_events && typeof Jibe.events[data.collection][before_hook_name] == "function"
52
+ Jibe.events[data.collection][before_hook_name].call null, partial, data.data, scope
38
53
 
39
- if has_events && typeof Jibe.events[data.collection][after_hook_name] == "function"
40
- Jibe.events[data.collection][after_hook_name].call null, partial, data.data, scope
54
+ if typeof $(this).data("silent") == "undefined"
55
+ if data.action_name == "create"
56
+ if $(this).data("strategy") == "prepend"
57
+ partial.prependTo wrapper
58
+ else
59
+ partial.appendTo wrapper
60
+ else if data.action_name == "update"
61
+ on_page.replaceWith partial
62
+ else if data.action_name == "destroy"
63
+ on_page.remove()
41
64
 
42
- if data.action_name == "destroy"
43
- on_page.remove()
65
+ if has_events && typeof Jibe.events[data.collection][after_hook_name] == "function"
66
+ Jibe.events[data.collection][after_hook_name].call null, partial, data.data, scope
44
67
 
45
68
  $ ->
46
69
  Jibe.init()
data/jibe.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["dallas@excitereative.ca"]
11
11
  spec.summary = %q{Jibe keeps all your data 'n sync!}
12
12
  spec.description = %q{Jibe keeps your pages live - with almost no effort!}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/dallasread/jibe"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
data/lib/jibe.rb CHANGED
@@ -31,7 +31,7 @@ module Jibe
31
31
  unless skip_jibe
32
32
  if Jibe.director == :pusher
33
33
  model = self.class.name.downcase
34
- Pusher["Jibe"].trigger("event", {
34
+ Pusher["jibe"].trigger("event", {
35
35
  action_name: action_name,
36
36
  action_capitalized: action_name.capitalize,
37
37
  id: id,
@@ -41,6 +41,7 @@ module Jibe
41
41
  partial: Jibe::Render.new.to_string(self),
42
42
  data: jibe_data
43
43
  })
44
+ logger.info "\033[0;34mJibing #{model} #{action_name}...\033[0m"
44
45
  end
45
46
  end
46
47
  end
data/lib/jibe/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jibe
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -4,33 +4,38 @@ module Jibe
4
4
  if args.try(:last).is_a? Hash
5
5
  strategy = args.try(:last)[:strategy]
6
6
  scope = args.try(:last)[:scope]
7
+ silent = args.try(:last)[:silent]
7
8
  restrict_to = args.try(:last)[:restrict_to]
9
+ partial = args.try(:partial)
8
10
  end
9
-
10
- strategy = "append" if strategy.blank?
11
- resource = "#{args.first.first.class.name}".downcase.pluralize
12
- data = {
13
- strategy: strategy,
14
- resource: resource,
15
- scope: scope
16
- }
17
-
18
- if restrict_to
19
- data[:restrict_to] = []
11
+
12
+ resource = "#{args.first.class.to_s.split("::").first}".downcase.pluralize
13
+
14
+ data = {}
15
+ data[:resource] = resource
16
+ data[:strategy] = strategy if strategy
17
+ data[:silent] = silent if silent
20
18
 
21
- if restrict_to.is_a? Array
22
- restrict_to.each do |restrict|
23
- data[:restrict_to].push "#{restrict.class.name.downcase}-#{restrict.id}"
19
+ if scope
20
+ if scope.is_a? Array
21
+ scopes = []
22
+
23
+ scope.each do |s|
24
+ s = "#{s.class.name.downcase}_id=#{s.id}" unless s.is_a? String
25
+ scopes.push s
24
26
  end
27
+
28
+ data[:scope] = scopes.join(" ")
29
+ elsif scope.is_a? Object
30
+ data[:scope] = "#{scope.class.name.downcase}_id=#{scope.id}"
25
31
  else
26
- data[:restrict_to].push "#{restrict_to.class.name.downcase}-#{restrict_to.id}"
32
+ data[:scope] = scope
27
33
  end
28
-
29
- data[:restrict_to] = data[:restrict_to].join(",")
30
34
  end
31
-
35
+
36
+ data[:silent] = true if args.first.nil?
32
37
  html = content_tag :script, nil, type: "x-jibe", data: data
33
- html += render *args
38
+ html += render *args unless args.first.nil?
34
39
  html.html_safe
35
40
  end
36
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jibe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dallas Read
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-25 00:00:00.000000000 Z
11
+ date: 2014-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,7 +56,7 @@ files:
56
56
  - lib/jibe/railtie.rb
57
57
  - lib/jibe/version.rb
58
58
  - lib/jibe/view_helpers.rb
59
- homepage: ''
59
+ homepage: https://github.com/dallasread/jibe
60
60
  licenses:
61
61
  - MIT
62
62
  metadata: {}