jibe 0.0.3 → 0.0.4

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: 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: {}