riot_js-rails 0.1.0 → 0.2.0

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: 7d683957b5d3a585f6e493b42f17f4908075264b
4
- data.tar.gz: 8532cc7d6277124a95475144d6198b6774e30bfc
3
+ metadata.gz: c2caab9b9960cca67b7470af50ce43bb3daca763
4
+ data.tar.gz: 6fd2a649d36cfee3669b1fedf839647a2d56f105
5
5
  SHA512:
6
- metadata.gz: 771a137a6e2e9e16a327b1b12e9b65f30fbc0dff2bab1b4983188a6a54a1e6167f1817a54d83ab12b8189589866455a68595260f2ef1fa64a1a440aaa36991dd
7
- data.tar.gz: a7b03afec4071dfee9105283308b82d706c6f670c10dd528405b4ae5fa74f755569752ac7d0dd08132f06a40cdd56cab40b20f6f033f7ee6748d749966d8f261
6
+ metadata.gz: b076a2783b991b3e2f29e8973f8bfd9b2ec08395960257482073dd9d8a8324c38d6fa0c4b21b16dbf0d951cc315417c4cb5d21a3af9a740ba3fa58a73e525769
7
+ data.tar.gz: 881f5d86d9ca7844b10efb615320203fb7973035b1515c90cbaedf28a9eee7c533d20f91b42fc2dad6ae3c7084f68f63b17f11313dced0b88f241bb5a17e811d
data/README.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  Muut Riot integration with Rails
4
4
 
5
+ ## Requirements
6
+
7
+ 1. Nodejs - for tags compiling.
8
+ 2. jQuery - for tags mounting (if you're going to use helpers provided by gem).
9
+ 3. Rails 3 and 4 supported
10
+
11
+
5
12
  ## Installation
6
13
 
7
14
  Add this line to your application's Gemfile:
@@ -10,13 +17,87 @@ Add this line to your application's Gemfile:
10
17
  gem 'riot_js-rails'
11
18
  ```
12
19
 
13
- And then execute:
20
+ Execute:
14
21
 
15
- $ bundle
22
+ $ bundle install
23
+
24
+ Add ```riot``` and ```riot_rails``` to your ```application.js```:
25
+ ```
26
+ //= require riot
27
+ //= require riot_rails
28
+ ```
16
29
 
17
30
  ## Usage
18
31
 
19
- TODO: Write usage instructions here
32
+ Put all your components somewhere into ```assets/javascript```. All components tags must have ```.tag``` extension (if you use older version of sprockets, try ```.js.tag```) and need to be required in your ```application.js```. This will compile component to Javascript.
33
+
34
+
35
+ ## Helpers
36
+
37
+ Each component has to be mounted. It can be done by executing ```riot.mount``` in javascript, e.g.:
38
+ ```javascript
39
+ $(function() {
40
+ riot.mount('example-tag');
41
+ });
42
+ ```
43
+
44
+
45
+ Alternative approach is to use view helper, e.g.:
46
+
47
+ ```ruby
48
+ <%= riot_component(:example_tag, { :header => 'Some header' }) %>
49
+ ```
50
+ This will generate following HTML:
51
+ ```html
52
+ <example-tag id="riot-example-tag-2822884" class="riot-rails-component"></example-tag>
53
+ ```
54
+ and immediate mount it with given options.
55
+
56
+ You can also use HTML element as tag:
57
+ ```ruby
58
+ <%= riot_component(:div, :example_tag, { :header => 'Some header' }) %>
59
+ ```
60
+ which will generate following code:
61
+ ```html
62
+ <div id="riot-example-tag-5012227" class="riot-rails-component" riot-tag="example-tag"></div>
63
+ ```
64
+
65
+ To generate tag with content use block:
66
+ ```ruby
67
+ <%= riot_component(:example_tag, { :header => 'Some header' }) do %>
68
+ <p>Content</p>
69
+ <% end %>
70
+ ```
71
+
72
+ If you want to add your own classes to component or any other attributes, pass it as last argument:
73
+ ```ruby
74
+ <%= riot_component(:div, :example_tag, { :header => 'Some header' }, { class: 'my-class' }) %>
75
+ ```
76
+
77
+ # HAML, SASS and CoffeeScript
78
+
79
+ You can define tag using HAML, SASS and CoffeeScript. Example:
80
+ ```haml
81
+ %example-haml
82
+ %h1{ onclick: "{change_header}" }
83
+ = "{header}"
84
+
85
+ :scss
86
+ timer-haml {
87
+ h1 {
88
+ background-color: #ffff00;
89
+ }
90
+ }
91
+
92
+ :coffee
93
+ self = this
94
+ this.header = opts.header
95
+
96
+ this.change_header = ()->
97
+ self.header = 'New header'
98
+ ```
99
+
100
+ Note: file has to have ```.tag.haml``` extension (or ```.js.tag.haml``` for older version of Sprockets)
20
101
 
21
102
  ## Contributing
22
103
 
data/lib/riot_js/rails.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'riot_js/rails/version'
2
+ require 'sprockets'
2
3
  require 'riot_js/rails/engine' if defined?(Rails)
3
4
  require 'riot_js/rails/railtie' if defined?(Rails)
4
5
 
@@ -3,38 +3,35 @@ module RiotJs
3
3
  module Helper
4
4
 
5
5
  def riot_component(*args, &block)
6
- case args.count
7
- when 2
8
- custom_tag_riot_component(*args, &block)
9
- when 3
10
- html_tag_riot_component(*args, &block)
11
- else
12
- raise ArgumentError, 'wrong number of arguments (required 2 or 3)'
6
+ if args[1].kind_of?(Hash)
7
+ custom_tag_riot_component(*args, &block)
8
+ else
9
+ html_tag_riot_component(*args, &block)
13
10
  end
14
11
  end
15
12
 
16
13
  private
17
14
 
18
- def custom_tag_riot_component(name, data, &block)
19
- component_name, attributes = component_attributes(name, data)
15
+ def custom_tag_riot_component(name, data, attributes={}, &block)
16
+ component_name, attributes = component_attributes(name, data, attributes)
20
17
 
21
18
  component_tag(component_name, attributes, &block)
22
19
  end
23
20
 
24
- def html_tag_riot_component(tag, name, data, &block)
25
- component_name, attributes = component_attributes(name, data)
21
+ def html_tag_riot_component(tag, name, data, attributes={}, &block)
22
+ component_name, attributes = component_attributes(name, data, attributes)
26
23
  attributes['riot-tag'] = component_name
27
24
 
28
25
  component_tag(tag, attributes, &block)
29
26
  end
30
27
 
31
- def component_attributes(name, data)
28
+ def component_attributes(name, data, attributes)
32
29
  component_name = name.to_s.gsub('_', '-')
33
- attributes = {
34
- id: "riot-#{component_name}-#{Random.rand(10000000)}",
35
- class: 'riot-rails-component',
36
- data: { opts: data.to_json }
37
- }
30
+ attributes_data = attributes[:data] || attributes['data'] || {}
31
+ attributes_class = attributes[:class] || attributes['class']
32
+ attributes = attributes.merge(id: "riot-#{component_name}-#{Random.rand(10000000)}",
33
+ class: "#{attributes_class} riot-rails-component".strip,
34
+ data: attributes_data.merge(opts: data.to_json))
38
35
  return component_name, attributes
39
36
  end
40
37
 
@@ -1,6 +1,5 @@
1
1
  require 'action_view'
2
2
  require 'execjs'
3
- require 'byebug'
4
3
 
5
4
  module RiotJs
6
5
  module Rails
@@ -35,4 +34,4 @@ module RiotJs
35
34
 
36
35
  end
37
36
  end
38
- end
37
+ end
@@ -1,34 +1,24 @@
1
1
  require 'riot_js/rails/processors/compiler'
2
2
 
3
+ if Gem::Version.new(Sprockets::VERSION) < Gem::Version.new('3.0.0')
4
+ require 'riot_js/rails/processors/sprockets_processor_v2'
5
+ else
6
+ require 'riot_js/rails/processors/sprockets_processor_v3'
7
+ end
8
+
3
9
  module RiotJs
4
10
  module Rails
5
- class Processor
6
- def self.instance
7
- @instance ||= new
8
- end
9
-
10
- def self.call(input)
11
- instance.call(input)
12
- end
11
+ class Processor < SprocketsProcessor
13
12
 
14
- def call(input)
15
- prepare(input)
16
-
17
- data = compile_tag
18
-
19
- @context.metadata.merge(data: data)
13
+ def process
14
+ compile_tag
20
15
  end
21
16
 
22
17
  private
23
18
 
24
- def prepare(input)
25
- @context = input[:environment].context_class.new(input)
26
- @data = input[:data]
27
- end
28
-
29
19
  def compile_tag
30
20
  ::RiotJs::Rails::Compiler.compile(@data)
31
21
  end
32
22
  end
33
23
  end
34
- end
24
+ end
@@ -0,0 +1,26 @@
1
+ module RiotJs
2
+ module Rails
3
+ class SprocketsProcessor < Tilt::Template
4
+
5
+ self.default_mime_type = 'application/javascript'
6
+
7
+ def self.register_self(app)
8
+ app.assets.register_engine '.tag', self
9
+ end
10
+
11
+ def evaluate(context, locals, &block)
12
+ @context = context
13
+ process
14
+ end
15
+
16
+ def prepare
17
+ @data = data
18
+ end
19
+
20
+ def process
21
+ raise 'Not implemented'
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,36 @@
1
+ module RiotJs
2
+ module Rails
3
+ class SprocketsProcessor
4
+ def self.instance
5
+ @instance ||= new
6
+ end
7
+
8
+ def self.call(input)
9
+ instance.call(input)
10
+ end
11
+
12
+ def call(input)
13
+ prepare(input)
14
+ data = process
15
+
16
+ @context.metadata.merge(data: data)
17
+ end
18
+
19
+ def self.register_self(app)
20
+ app.assets.register_engine '.tag', self, mime_type: 'application/javascript'
21
+ end
22
+
23
+ private
24
+
25
+ def process
26
+ raise 'Not implemented'
27
+ end
28
+
29
+ def prepare(input)
30
+ @context = input[:environment].context_class.new(input)
31
+ @data = input[:data]
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -6,11 +6,11 @@ module RiotJs
6
6
  module Rails
7
7
  class Railtie < ::Rails::Railtie
8
8
  initializer :setup_sprockets do |app|
9
- app.assets.register_engine '.tag', Processor, mime_type: 'application/javascript'
9
+ Processor.register_self app
10
10
 
11
11
  if defined?(::Haml)
12
12
  require 'tilt/haml'
13
- app.assets.register_engine '.haml', ::Tilt::HamlTemplate, mime_type: 'text/html'
13
+ app.assets.register_engine '.haml', ::Tilt::HamlTemplate
14
14
  end
15
15
  end
16
16
 
@@ -22,4 +22,4 @@ module RiotJs
22
22
 
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -1,5 +1,5 @@
1
1
  module RiotJs
2
2
  module Rails
3
- VERSION = "0.1.0"
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -20,11 +20,12 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
 
23
- spec.add_dependency 'rails', '~> 4'
23
+ spec.add_dependency 'rails', '>= 3.0', '< 4.3'
24
24
  spec.add_dependency 'execjs', '~> 2'
25
25
 
26
26
  spec.add_development_dependency 'bundler', '~> 1.8'
27
27
  spec.add_development_dependency 'rake', '~> 10.0'
28
28
  spec.add_development_dependency 'minitest', '~> 5.1'
29
29
  spec.add_development_dependency 'byebug', '~> 5.0'
30
+ spec.add_development_dependency 'mocha', '~> 1.0'
30
31
  end
@@ -1,7 +1,7 @@
1
1
  ;(function($) {
2
2
 
3
3
  var riotRails = {
4
- componentSelector: '.riot-rails-component',
4
+ componentClass: 'riot-rails-component',
5
5
  mounted: [],
6
6
  mount: function(selector) {
7
7
  var component = $(selector);
@@ -18,7 +18,7 @@
18
18
  },
19
19
  mountAll: function() {
20
20
  var self = this;
21
- $(self.componentSelector).each(function(){
21
+ $('.' + self.componentClass).each(function(){
22
22
  self.mount('#' + $(this).attr('id'));
23
23
  });
24
24
  }
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riot_js-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartosz Jaroszewski
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-24 00:00:00.000000000 Z
11
+ date: 2015-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '4'
22
+ version: '4.3'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '4'
32
+ version: '4.3'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: execjs
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +100,20 @@ dependencies:
94
100
  - - "~>"
95
101
  - !ruby/object:Gem::Version
96
102
  version: '5.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: mocha
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.0'
97
117
  description: This gem provides integration of Muut Riot with Rails
98
118
  email:
99
119
  - b.jarosze@gmail.com
@@ -110,6 +130,8 @@ files:
110
130
  - lib/riot_js/rails/helper.rb
111
131
  - lib/riot_js/rails/processors/compiler.rb
112
132
  - lib/riot_js/rails/processors/processor.rb
133
+ - lib/riot_js/rails/processors/sprockets_processor_v2.rb
134
+ - lib/riot_js/rails/processors/sprockets_processor_v3.rb
113
135
  - lib/riot_js/rails/railtie.rb
114
136
  - lib/riot_js/rails/version.rb
115
137
  - riot_js-rails.gemspec