kamiflex 0.12.1 → 0.16.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
  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