kamiflex 0.12.0 → 0.15.0

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
  SHA256:
3
- metadata.gz: b9c0e63d45a74a91db303733a98b67ca7d86f9864a320a8dddeb80362e4e812f
4
- data.tar.gz: 0e4a0b7ff1ed8ca8203253dcee0963574afc2670331c80de6a6fa51bb335a66a
3
+ metadata.gz: 7e3ff1f39a3eaecc4f496d30432602c6ff1470bae0141cb1a3c991e0a842dae4
4
+ data.tar.gz: 70d4de11a4ca7e4f6e8e401cc7b9aff80b081af856a618ca50b349a563b0932a
5
5
  SHA512:
6
- metadata.gz: 20d529c449aaf92c79dc54ef9a9ab36b1e015a702bf5cd4991209a6e4d2b463327f5d3c3c0a4d5d49af2c789b20b8ef9cc82afbe59c364fcfc2ef0ae50f6ecd7
7
- data.tar.gz: a10f3ed766e09479f92f1f5ba3983230e5c1d467db944e60d898d1493cceb526052482a0f04df758555ae57ec7189f7cc94529a2c0cda0460622ed07c6c04406
6
+ metadata.gz: a94b7419dba86af0b272ed4788aa11231af59042081b712b8440780d85ce5ec1ea68c7e77c0ba6d4e73044226c28a218758009124475a2c8fc8b81a45f4032fc
7
+ data.tar.gz: 8e73dc3845ce59f6deb32e27df5acc14135bde537be86c04787e4f5eb30efd97d7439999681f0f2d32e2d78f62bd657da73fdc60b904cf0e1b94eecab2d54131
data/README.md CHANGED
@@ -2,43 +2,75 @@
2
2
  Kamiflex provide a pretty DSL to build your [flex message of line messaging api](https://developers.line.biz/en/docs/messaging-api/using-flex-messages/) like this:
3
3
 
4
4
  #### in pure ruby
5
+
6
+ # [example/show_cases/cards.rb](example/show_cases/cards.rb)
7
+
5
8
  ``` ruby
6
- # example/todos_index.rb
7
9
  require 'kamiflex'
8
10
 
9
- @todos = [
11
+ @products = [
10
12
  {
11
- id: 1,
12
- name: "ruby"
13
+ name: "kamigo",
14
+ star: 4,
15
+ place: "https://github.com/etrex/kamigo",
16
+ time: "10:00 - 23:00",
17
+ contact_url: "https://github.com/etrex/kamigo",
18
+ product_url: "https://github.com/etrex/kamigo"
13
19
  },
14
20
  {
15
- id: 2,
16
- name: "rails"
21
+ name: "kamiliff",
22
+ star: 3,
23
+ place: "https://github.com/etrex/kamiliff",
24
+ time: "11:00 - 23:00",
25
+ contact_url: "https://github.com/etrex/kamiliff",
26
+ product_url: "https://github.com/etrex/kamiliff"
17
27
  },
18
28
  {
19
- id: 3,
20
- name: "kamiflex"
21
- }
29
+ name: "kamiflex",
30
+ star: 5,
31
+ place: "https://github.com/etrex/kamiflex",
32
+ time: "09:00 - 23:00",
33
+ contact_url: "https://github.com/etrex/kamiflex",
34
+ product_url: "https://github.com/etrex/kamiflex"
35
+ },
22
36
  ]
23
37
 
38
+ def star(num)
39
+ baseline_box margin: :md do
40
+ (0...num).each do
41
+ icon "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png", size: :sm
42
+ end
43
+ (num...5).each do
44
+ icon "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png", size: :sm
45
+ end
46
+ text "#{num}.0", size: :sm, color: "#999999", margin: :md, flex: 0
47
+ end
48
+ end
49
+
50
+ def field(key, value)
51
+ baseline_box spacing: :sm do
52
+ text key, "color":"#aaaaaa","size":"sm","flex":1
53
+ text value, "wrap":true,"color":"#666666","size":"sm","flex":5
54
+ end
55
+ end
56
+
24
57
  json = Kamiflex.build(self) do
25
- bubble do
26
- body do
27
- horizontal_box do
28
- text "🍔", flex: 0, action: message_action("/")
29
- text "Todos"
30
- text "🆕", align: "end", action: uri_action(new_todo_path))
31
- end
32
- separator
33
- if @todos.present?
34
- vertical_box margin: "lg" do
35
- horizontal_box @todos, margin: "lg" do |todo|
36
- text todo[:name], action: message_action("/todos/#{todo[:id]}")
37
- text "❌", align: "end", action: message_action("DELETE /todos/#{todo[:id]}")
38
- end
58
+ carousel do
59
+ bubbles @products do |product|
60
+ hero "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png",
61
+ size: :full, aspectRatio: "20:13", aspectMode: :cover, action: uri_action("http://linecorp.com/")
62
+ body do
63
+ text product[:name], weight: :bold, size: :xl
64
+ star(product[:star])
65
+ vertical_box margin: :lg, spacing: :sm do
66
+ field "Place", product[:place]
67
+ field "Time", product[:time]
39
68
  end
40
- else
41
- text "no contents yet", margin: "lg"
69
+ end
70
+ footer spacing: :sm, flex: 0 do
71
+ url_button "CALL", product[:contact_url], style: :link, height: :sm
72
+ url_button "WEBSITE", product[:product_url], style: :link, height: :sm
73
+ spacer size: :sm
42
74
  end
43
75
  end
44
76
  end
@@ -47,20 +79,18 @@ end
47
79
  puts json
48
80
  ```
49
81
 
50
- The render result looks like this:
51
-
52
- ![](image/todos_index.png)
82
+ ![](image/show_cases/cards.png)
53
83
 
54
84
  #### in rails
55
85
  ``` ruby
56
86
  # todos/index.line.erb
57
- <%= raw(Kamiflex.build(self) do
87
+ <%= raw Kamiflex.build(self) do
58
88
  bubble do
59
89
  body do
60
90
  horizontal_box do
61
91
  text "🍔", flex: 0, action: message_action("/")
62
92
  text "Todos"
63
- text "🆕", align: "end", action: uri_action(new_todo_path))
93
+ text "🆕", align: "end", action: uri_action(new_todo_path)
64
94
  end
65
95
  separator
66
96
  if @todos.present?
@@ -75,7 +105,7 @@ The render result looks like this:
75
105
  end
76
106
  end
77
107
  end
78
- end )%>
108
+ end %>
79
109
  ```
80
110
 
81
111
  I will make a template name `flex` for rails in the future.
@@ -89,7 +119,7 @@ bubble do
89
119
  horizontal_box do
90
120
  text "🍔", flex: 0, action: message_action("/")
91
121
  text "Todos"
92
- text "🆕", align: "end", action: uri_action(new_todo_path))
122
+ text "🆕", align: "end", action: uri_action(new_todo_path)
93
123
  end
94
124
  separator
95
125
  if @todos.present?
data/lib/kamiflex.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "json"
2
+ require_relative "./kamiflex/version"
2
3
  require_relative "./kamiflex/core"
3
4
  require_relative "./kamiflex/basic_elements"
4
5
  require_relative "./kamiflex/actions"
@@ -6,7 +7,7 @@ require_relative "./kamiflex/quick_reply"
6
7
  require_relative "./kamiflex/custom"
7
8
 
8
9
  module Kamiflex
9
- def self.to_hash(parent)
10
+ def self.hash(parent, &block)
10
11
  parent.class.include Kamiflex::Core
11
12
  parent.class.include Kamiflex::BasicElements
12
13
  parent.class.include Kamiflex::Actions
@@ -15,24 +16,25 @@ module Kamiflex
15
16
 
16
17
  parent.instance_exec do
17
18
  flex do
18
- yield
19
+ parent.instance_exec(&block)
19
20
  end
20
21
  end
21
22
  end
22
23
 
23
- def self.build(parent)
24
- parent.class.include Kamiflex::Core
25
- parent.class.include Kamiflex::BasicElements
26
- parent.class.include Kamiflex::Actions
27
- parent.class.include Kamiflex::QuickReply
28
- parent.class.include Kamiflex::Custom
24
+ def self.to_hash(parent, &block)
25
+ self.hash(parent, &block)
26
+ end
29
27
 
30
- hash = parent.instance_exec do
31
- flex do
32
- yield
33
- end
34
- end
35
- JSON.pretty_generate hash
28
+ def self.build(parent, &block)
29
+ JSON.pretty_generate self.hash(parent, &block)
30
+ end
31
+
32
+ def self.json(parent, &block)
33
+ self.build(parent, &block)
34
+ end
35
+
36
+ def self.compact_json(parent, &block)
37
+ self.to_hash(parent, &block).to_json
36
38
  end
37
39
  end
38
40
 
@@ -4,19 +4,25 @@ module Kamiflex
4
4
  {
5
5
  type: "message",
6
6
  label: label,
7
- text: label
7
+ text: params[:text] || label
8
8
  }.merge(params)
9
9
  end
10
10
 
11
11
  def uri_action(uri, **params)
12
- {
12
+ action = {
13
13
  type: "uri",
14
14
  label: uri[0...40],
15
- uri: uri,
16
- # altUri: {
17
- # desktop: uri
18
- # }
15
+ uri: uri
19
16
  }
17
+
18
+ return action if params.nil?
19
+ return action if params[:desktop].nil?
20
+
21
+ action[:altUri] = {
22
+ desktop: params[:desktop]
23
+ }
24
+
25
+ action
20
26
  end
21
27
 
22
28
  def postback_action(data, **params)
@@ -43,13 +43,22 @@ module Kamiflex
43
43
  end
44
44
 
45
45
  def url_button(label, url, **params)
46
- @flex_contents << {
47
- "type": "button",
48
- "action": {
49
- "type": "uri",
50
- "label": label,
51
- "uri": url
46
+ action = {
47
+ type: "uri",
48
+ label: label,
49
+ uri: url,
50
+ }
51
+
52
+ if params[:desktop].present?
53
+ action[:altUri] = {
54
+ desktop: params[:desktop]
52
55
  }
56
+ params = params.reject {|key, value| key == :desktop }
57
+ end
58
+
59
+ @flex_contents << {
60
+ type: "button",
61
+ action: action
53
62
  }.merge(params)
54
63
  end
55
64
 
data/lib/kamiflex/core.rb CHANGED
@@ -6,7 +6,7 @@ module Kamiflex
6
6
  type: "flex",
7
7
  altText: "this is a flex message",
8
8
  contents: _contents.first
9
- }.merge(attributes.slice(:quickReply))
9
+ }.merge(attributes.slice(:quickReply, :altText))
10
10
  end
11
11
 
12
12
  def bubble(**params)
@@ -1,3 +1,3 @@
1
1
  module Kamiflex
2
- VERSION = '0.12.0'
2
+ VERSION = '0.15.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kamiflex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.15.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: 2020-10-27 00:00:00.000000000 Z
11
+ date: 2021-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json