kamiflex 0.12.1 → 0.16.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: 071ab7c633d8d7a5a420593aa91354f7ae75ef494fe1f737d685e3a158c44174
4
- data.tar.gz: aff944e65d5af0a26712db2ef11655049eb3e48e668706866e488083df90c984
3
+ metadata.gz: f720f54831cd629b5e9ac62071f89fe6bf94c048724a09855a42f925651b95b1
4
+ data.tar.gz: 74803c3a50ae3b7815f5129198957fa14da4795575980d5d3205866c690addaa
5
5
  SHA512:
6
- metadata.gz: 46e3424571adeb2eed428baad0325227bea035f340f5c9f6ddbd78c779731a4f7ed27809c317f04eff0b90d0f8db302dff10ddfb64bb7e2e393fda90b7995c80
7
- data.tar.gz: 30162106bf30c8e7231b238d98fb30e802fba2f1f22583caab14342ee8f15f2ebd1c1f02cc1f8257044557203cf9977c3ae8b3eb0dabae087779a7934d2a81b3
6
+ metadata.gz: 382b0159bd2c5b8690429197c70c9abddc0c6544094efed5ca40700dcdad3c2adc138d432f52b92ce312d3393a2c7c3ac9d1bc43217ce039bde37854e2ccef6a
7
+ data.tar.gz: 9ec944b733f1d561ceea2c0bb3e598887946a8906ae6bcf365d7f1606f168fef92d19642890b5d58573ca1dcb717aa8b291a08330e8c28b989712d3bc67142eb
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&.dig(:desktop)
53
+ action[:altUri] = {
54
+ desktop: params&.dig(: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
@@ -4,9 +4,9 @@ module Kamiflex
4
4
  attributes, _contents = flex_scope{ yield }
5
5
  {
6
6
  type: "flex",
7
- altText: attributes[:alt_text] || "this is a flex message",
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.1'
2
+ VERSION = '0.16.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.1
4
+ version: 0.16.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