rails_liff 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +67 -12
- data/app/assets/javascripts/rails_liff.js +57 -0
- data/app/helpers/liff_helper.rb +3 -1
- data/app/views/layouts/application.liff.erb +1 -53
- data/config/initializers/assets.rb +1 -0
- data/lib/rails_liff/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 15597087e32963e4ab7b501b976e98da8200efd55a75de25f6ee4344ba8a939b
|
4
|
+
data.tar.gz: c9bcafcf900c22d32b129bf1cb00a59bfb75d1ee95b394ebfe39b22077bc1e1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2707626a0608504b9c8323c9f9110ad4b823246d37973c40f0e0d60269ad66edba31faa53d1339e2bd12616e660bfb933e0f2240318c58f86ab9cafe7c415f1
|
7
|
+
data.tar.gz: 90fbb45bd348dfed1912ce87e56bab753eb55177623472c5277b4b6eb4cb652ed65bbf3ded0b757bf03a528e61e7bcbd67f6b6b88de2a91258ca4bc6dfbfc582
|
data/README.md
CHANGED
@@ -1,28 +1,83 @@
|
|
1
1
|
# RailsLiff
|
2
|
-
Short description and motivation.
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
RailsLiff make LIFF easy to use.
|
4
|
+
|
5
|
+
# Feature
|
6
|
+
- register LIFF once and reuse to your all path.
|
7
|
+
- liff_submit event: a hook when LIFF form submit, with form data in js object format.
|
8
|
+
- liff_send_text_message: quick send message and close LIFF.
|
6
9
|
|
7
10
|
## Installation
|
8
|
-
Add this line to your application's Gemfile:
|
9
11
|
|
10
12
|
```ruby
|
11
13
|
gem 'rails_liff'
|
12
14
|
```
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
login to line developers, and create 3 LIFF for 3 different size.
|
17
|
+
|
18
|
+
- for compact
|
19
|
+
- name: Compact
|
20
|
+
- size: Compact
|
21
|
+
- Endpoint URL: https://yourwebsite/liff
|
22
|
+
|
23
|
+
- for tall
|
24
|
+
- name: Tall
|
25
|
+
- size: Tall
|
26
|
+
- Endpoint URL: https://yourwebsite/liff
|
27
|
+
|
28
|
+
- for full
|
29
|
+
- name: Full
|
30
|
+
- size: Full
|
31
|
+
- Endpoint URL: https://yourwebsite/liff
|
32
|
+
|
33
|
+
and then copy the result to enviroment parameters:
|
34
|
+
|
35
|
+
```
|
36
|
+
LIFF_COMPACT=line://app/for_compact_liff_id
|
37
|
+
LIFF_TALL=line://app/for_tall_liff_id
|
38
|
+
LIFF_FULL=line://app/for_full_liff_id
|
39
|
+
```
|
40
|
+
|
41
|
+
## Usage
|
42
|
+
|
43
|
+
### Implement LIFF View
|
44
|
+
|
45
|
+
RailsLiff using view format `.liff`, so you can reuse exists controller and model, you can create a LIFF form by only adding a new view file.
|
46
|
+
|
47
|
+
Suppose you have a resource `todos`, you want to create a liff form for `todos/new`, so you create a file `app/views/todos/new.liff.erb`, the content is as follows:
|
48
|
+
|
49
|
+
```
|
50
|
+
<% content_for :title, "new todo" %>
|
51
|
+
|
52
|
+
<%= render "todos/form.html", todo: @todo %>
|
53
|
+
|
54
|
+
<%= link_to "test", liff_path(path: '/todos/new') %>
|
55
|
+
```
|
56
|
+
|
57
|
+
You can test the form at [localhost:3000/todos/new.liff](localhost:3000/todos/new.liff)
|
58
|
+
|
59
|
+
### Generate LIFF Link
|
60
|
+
|
61
|
+
You can change any path to liff by `liff_path` method.
|
62
|
+
|
63
|
+
for example:
|
64
|
+
|
65
|
+
```
|
66
|
+
liff_path(path: '/todos/new')
|
17
67
|
```
|
18
68
|
|
19
|
-
|
20
|
-
|
21
|
-
|
69
|
+
You can choice the liff size by `liff_size` parameter. the default value of liff_size is compact.
|
70
|
+
|
71
|
+
```
|
72
|
+
liff_path(path: '/todos/new', liff_size: :compact)
|
73
|
+
liff_path(path: '/todos/new', liff_size: :tall)
|
74
|
+
liff_path(path: '/todos/new', liff_size: :full)
|
22
75
|
```
|
23
76
|
|
24
|
-
|
25
|
-
|
77
|
+
liff_path method add format :liff automatically.
|
78
|
+
|
79
|
+
## Author
|
80
|
+
create by [etrex](https://etrex.tw)
|
26
81
|
|
27
82
|
## License
|
28
83
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -0,0 +1,57 @@
|
|
1
|
+
function liff_send_text_message(text){
|
2
|
+
liff.sendMessages(
|
3
|
+
[
|
4
|
+
{
|
5
|
+
type: 'text',
|
6
|
+
text: text
|
7
|
+
}
|
8
|
+
]
|
9
|
+
).then(() => {
|
10
|
+
liff.closeWindow();
|
11
|
+
})
|
12
|
+
.catch((err) => {
|
13
|
+
alert('error', err);
|
14
|
+
});
|
15
|
+
}
|
16
|
+
|
17
|
+
$(function(){
|
18
|
+
function dispatch_liff_event(data){
|
19
|
+
var event = new CustomEvent('liff_submit', { 'detail': data });
|
20
|
+
window.dispatchEvent(event);
|
21
|
+
}
|
22
|
+
$('input[type="submit"]').click(function(e){
|
23
|
+
e.preventDefault();
|
24
|
+
dispatch_liff_event(get_request_text($("form")));
|
25
|
+
})
|
26
|
+
|
27
|
+
function get_request_text(form_element){
|
28
|
+
var data = get_form_data(form_element);
|
29
|
+
var method = form_element.attr("method").toUpperCase();
|
30
|
+
var url = form_element.attr("action");
|
31
|
+
return {
|
32
|
+
data: data,
|
33
|
+
method: method,
|
34
|
+
url: url
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
function get_form_data(form_element){
|
39
|
+
var excpet = ["utf8","authenticity_token"];
|
40
|
+
var form = form_element.serializeArray();
|
41
|
+
form = form.filter((a)=>{ return !excpet.includes(a.name) })
|
42
|
+
var data = {}
|
43
|
+
form.forEach((a)=>{ set_object_value(data, a.name, a.value) })
|
44
|
+
return data;
|
45
|
+
}
|
46
|
+
|
47
|
+
function set_object_value(object, path, value){
|
48
|
+
var o = object;
|
49
|
+
var p = path.replace(/(\]\[)/g, "[").replace(/]$/g, "").split("[")
|
50
|
+
var last_key = p.pop();
|
51
|
+
p.forEach((key)=>{
|
52
|
+
o[key] = o[key] || {}
|
53
|
+
o = o[key]
|
54
|
+
})
|
55
|
+
o[last_key] = value;
|
56
|
+
}
|
57
|
+
});
|
data/app/helpers/liff_helper.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module LiffHelper
|
2
2
|
def liff_path(params)
|
3
|
-
|
3
|
+
liff_size = params[:liff_size] || "COMPACT"
|
4
|
+
raise "liff_size should be COMPACT, TALL or FULL." unless liff_size.in? %w[COMPACT TALL FULL]
|
5
|
+
liff_url = ENV["LIFF_#{liff_size}"]
|
4
6
|
"#{liff_url}?#{params.to_query}"
|
5
7
|
end
|
6
8
|
end
|
@@ -13,64 +13,12 @@
|
|
13
13
|
|
14
14
|
<script src="https://d.line-scdn.net/liff/1.0/sdk.js"></script>
|
15
15
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
|
16
|
+
<%= javascript_include_tag 'rails_liff', 'data-turbolinks-track': 'reload' %>
|
16
17
|
</head>
|
17
18
|
|
18
19
|
<body>
|
19
20
|
<div class="container-fluid">
|
20
21
|
<%= yield %>
|
21
22
|
</div>
|
22
|
-
|
23
|
-
<script>
|
24
|
-
$(function(){
|
25
|
-
$('input[type="submit"]').click(function(e){
|
26
|
-
e.preventDefault();
|
27
|
-
send_message(get_request_text($("form")));
|
28
|
-
})
|
29
|
-
|
30
|
-
function send_message(text){
|
31
|
-
liff.sendMessages(
|
32
|
-
[
|
33
|
-
{
|
34
|
-
type: 'text',
|
35
|
-
text: text
|
36
|
-
}
|
37
|
-
]
|
38
|
-
).then(() => {
|
39
|
-
liff.closeWindow();
|
40
|
-
})
|
41
|
-
.catch((err) => {
|
42
|
-
alert('error', err);
|
43
|
-
});
|
44
|
-
}
|
45
|
-
|
46
|
-
function get_request_text(form_element){
|
47
|
-
var data = get_form_data(form_element);
|
48
|
-
var json = JSON.stringify(data);
|
49
|
-
var method = form_element.attr("method").toUpperCase();
|
50
|
-
var url = form_element.attr("action");
|
51
|
-
return `${method} ${url}\n${json}`;
|
52
|
-
}
|
53
|
-
|
54
|
-
function get_form_data(form_element){
|
55
|
-
var excpet = ["utf8","authenticity_token"];
|
56
|
-
var form = form_element.serializeArray();
|
57
|
-
form = form.filter((a)=>{ return !excpet.includes(a.name) })
|
58
|
-
var data = {}
|
59
|
-
form.forEach((a)=>{ set_object_value(data, a.name, a.value) })
|
60
|
-
return data;
|
61
|
-
}
|
62
|
-
|
63
|
-
function set_object_value(object, path, value){
|
64
|
-
var o = object;
|
65
|
-
var p = path.replace(/(\]\[)/g, "[").replace(/]$/g, "").split("[")
|
66
|
-
var last_key = p.pop();
|
67
|
-
p.forEach((key)=>{
|
68
|
-
o[key] = o[key] || {}
|
69
|
-
o = o[key]
|
70
|
-
})
|
71
|
-
o[last_key] = value;
|
72
|
-
}
|
73
|
-
});
|
74
|
-
</script>
|
75
23
|
</body>
|
76
24
|
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
Rails.application.config.assets.precompile << "rails_liff.js"
|
data/lib/rails_liff/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_liff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- etrex kuo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -34,10 +34,12 @@ files:
|
|
34
34
|
- MIT-LICENSE
|
35
35
|
- README.md
|
36
36
|
- Rakefile
|
37
|
+
- app/assets/javascripts/rails_liff.js
|
37
38
|
- app/controllers/liff_controller.rb
|
38
39
|
- app/helpers/liff_helper.rb
|
39
40
|
- app/views/layouts/application.liff.erb
|
40
41
|
- app/views/liff/entry.html.erb
|
42
|
+
- config/initializers/assets.rb
|
41
43
|
- config/initializers/mime_types.rb
|
42
44
|
- config/routes.rb
|
43
45
|
- lib/rails_liff.rb
|