kamiflex 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
  SHA256:
3
- metadata.gz: f17268df0c41a86c2bcbe263ee1afb9da8817dd7ea2fff66a542d4eb79e908bc
4
- data.tar.gz: 38864bcae3bacba2fcd7ee32085f69ed5b05992aef2a56cf5e404cdf700c3a05
3
+ metadata.gz: 02abb717a3c9bf92e88f986bd17fe1ef469fa5c48d498ad7548ef784d01744ac
4
+ data.tar.gz: c6cf2e666d479328551e19139c34f2362c9d53fe38cbca903c9fb57f3c7b58d9
5
5
  SHA512:
6
- metadata.gz: 3c60c9c1731877dab32564d86ae6523634a9997f81a53a93f130d93688d906239eabc0c6380f64431e96662299ae64111228436b9e83755e7f6c3e7a6ca3e9fe
7
- data.tar.gz: 457c9f06cc3ef215fe6f03e6211e58a6367a698e27dbeb8047144bc872d9f390df8d1aa8f467a315449c4e348629deeb6398dc5f4624de965497a22ce7db85b4
6
+ metadata.gz: 52394c972f2ca4d08f3b0f67375cdeb1012f5a11a74c435e290494adbc08e37e70661d0f1318a9e971af059df88ea33c18e7be68818c58066243e4d4b3224397
7
+ data.tar.gz: df49a613f94f1d35890cc9fe51d5cb9c6d33b057457c7807a2018ee4a3487b33b2f9d6a366f1a416ad4f6805c2ed247c12c1e32bcb6f7a4c1dafb64287440a1b
@@ -0,0 +1,22 @@
1
+ module Kamiflex
2
+ module Actions
3
+ def message_action(label, **params)
4
+ {
5
+ type: "message",
6
+ label: label,
7
+ text: label
8
+ }.merge(params)
9
+ end
10
+
11
+ def uri_action(uri, **params)
12
+ {
13
+ type: "uri",
14
+ label: uri[0...40],
15
+ uri: uri,
16
+ # altUri: {
17
+ # desktop: uri
18
+ # }
19
+ }
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,61 @@
1
+ module Kamiflex
2
+ module BasicElements
3
+ def text(message, **params)
4
+ @flex_contents << {
5
+ "type": "text",
6
+ "text": message
7
+ }.merge(params)
8
+ end
9
+
10
+ def image(url, **params)
11
+ @flex_contents << {
12
+ "type": "image",
13
+ "url": url
14
+ }.merge(params)
15
+ end
16
+
17
+ def icon(url, **params)
18
+ @flex_contents << {
19
+ "type": "image",
20
+ "url": url
21
+ }.merge(params)
22
+ end
23
+
24
+ def separator(**params)
25
+ @flex_contents << {
26
+ "type": "separator",
27
+ "margin": "md",
28
+ "color": "#000000",
29
+ }.merge(params)
30
+ end
31
+
32
+ def spacer(**params)
33
+ @flex_contents << {
34
+ "type": "spacer",
35
+ "size": "md",
36
+ }.merge(params)
37
+ end
38
+
39
+ def url_button(label, url, **params)
40
+ @flex_contents << {
41
+ "type": "button",
42
+ "action": {
43
+ "type": "uri",
44
+ "label": label,
45
+ "uri": url
46
+ }
47
+ }.merge(params)
48
+ end
49
+
50
+ def message_button(label, message, **params)
51
+ @flex_contents << {
52
+ "type": "button",
53
+ "action": {
54
+ "type": "message",
55
+ "label": label,
56
+ "text": message
57
+ }
58
+ }.merge(params)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,78 @@
1
+ module Kamiflex
2
+ module Core
3
+ def bubble
4
+ attributes, _contents = flex_scope{ yield }
5
+ {
6
+ type: "flex",
7
+ altText: "this is a flex message",
8
+ contents: {
9
+ type: "bubble"
10
+ }.merge(attributes.slice(:header, :hero, :body, :footer, :style))
11
+ }.merge(attributes.slice(:quickReply))
12
+ end
13
+
14
+ # bubble attributes
15
+ def header(**params)
16
+ _attributes, contents = flex_scope{ yield }
17
+ @flex_attributes[:header] = {
18
+ type: "box",
19
+ layout: "vertical",
20
+ contents: contents
21
+ }.merge(params)
22
+ end
23
+
24
+ def hero(image_url, **params)
25
+ _attributes, _contents = flex_scope{ yield }
26
+ @flex_attributes[:hero] = {}
27
+ end
28
+
29
+ def body(**params)
30
+ _attributes, contents = flex_scope{ yield }
31
+ @flex_attributes[:body] = {
32
+ type: "box",
33
+ layout: "vertical",
34
+ contents: contents
35
+ }.merge(params)
36
+ end
37
+
38
+ def footer(**params)
39
+ _attributes, contents = flex_scope{ yield }
40
+ @flex_attributes[:footer] = {
41
+ type: "box",
42
+ layout: "vertical",
43
+ contents: contents
44
+ }.merge(params)
45
+ end
46
+
47
+ # container
48
+ def horizontal_box(resources = [nil], **params)
49
+ resources.each do |resource|
50
+ _attributes, contents = flex_scope{ yield resource }
51
+ @flex_contents << {
52
+ type: "box",
53
+ layout: "horizontal",
54
+ contents: contents
55
+ }.merge(params)
56
+ end
57
+ end
58
+
59
+ def vertical_box(resources = [nil], **params, &block)
60
+ horizontal_box(resources, layout: "vertical", **params, &block)
61
+ end
62
+
63
+ def baseline_box(resources = [nil], **params, &block)
64
+ horizontal_box(resources, layout: "baseline", **params, &block)
65
+ end
66
+
67
+ private
68
+
69
+ def flex_scope
70
+ parent_attributes, parent_contents = @flex_attributes, @flex_contents
71
+ @flex_attributes, @flex_contents = {}, []
72
+ yield self
73
+ [@flex_attributes, @flex_contents]
74
+ ensure
75
+ @flex_attributes, @flex_contents = parent_attributes, parent_contents
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,42 @@
1
+ module Kamiflex
2
+ module QuickReply
3
+
4
+ def quick_reply
5
+ _attributes, contents = flex_scope{ yield }
6
+ @flex_attributes[:quickReply] = {
7
+ items: contents
8
+ }
9
+ end
10
+
11
+ def action_item(action)
12
+ @flex_contents << {
13
+ type: "action",
14
+ action: action
15
+ }
16
+ end
17
+
18
+ def message_action_item(label, **params)
19
+ action_item(message_action(label, **params))
20
+ end
21
+
22
+ def postback_action_item(label, **params)
23
+ action_item(postback_action(label, **params))
24
+ end
25
+
26
+ def datetime_picker_action_item(label, **params)
27
+ action_item(message_action(label, **params))
28
+ end
29
+
30
+ def camera_action_item(label, **params)
31
+ action_item(camera_action(label, **params))
32
+ end
33
+
34
+ def camera_roll_action_item(label, **params)
35
+ action_item(camera_roll_action(label, **params))
36
+ end
37
+
38
+ def location_action_item(label, **params)
39
+ action_item(location_action(label, **params))
40
+ end
41
+ end
42
+ end
@@ -1,3 +1,3 @@
1
1
  module Kamiflex
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/kamiflex.rb CHANGED
@@ -1,164 +1,15 @@
1
1
  require "kamiflex/railtie"
2
+ require "kamiflex/core"
3
+ require "kamiflex/basic_elements"
4
+ require "kamiflex/actions"
5
+ require "kamiflex/quick_reply"
2
6
 
3
- module KamiflexModule
4
- def bubble
5
- attributes, _contents = flex_scope{ yield }
6
- {
7
- type: "flex",
8
- altText: "this is a flex message",
9
- contents: {
10
- type: "bubble"
11
- }.merge(attributes)
12
- }
13
- end
14
-
15
- # bubble attributes
16
- def header(**params)
17
- _attributes, contents = flex_scope{ yield }
18
- @flex_attributes[:header] = {
19
- type: "box",
20
- layout: "vertical",
21
- contents: contents
22
- }.merge(params)
23
- end
24
-
25
- def hero(image_url, **params)
26
- _attributes, _contents = flex_scope{ yield }
27
- @flex_attributes[:hero] = {}
28
- end
29
-
30
- def body(**params)
31
- _attributes, contents = flex_scope{ yield }
32
- @flex_attributes[:body] = {
33
- type: "box",
34
- layout: "vertical",
35
- contents: contents
36
- }.merge(params)
37
- end
38
-
39
- def footer(**params)
40
- _attributes, contents = flex_scope{ yield }
41
- @flex_attributes[:footer] = {
42
- type: "box",
43
- layout: "vertical",
44
- contents: contents
45
- }.merge(params)
46
- end
47
-
48
- # container
49
- def horizontal_box(resources = [nil], **params)
50
- resources.each do |resource|
51
- _attributes, contents = flex_scope{ yield resource }
52
- @flex_contents << {
53
- type: "box",
54
- layout: "horizontal",
55
- contents: contents
56
- }.merge(params)
57
- end
58
- end
59
-
60
- def vertical_box(resources = [nil], **params, &block)
61
- horizontal_box(resources, layout: "vertical", **params, &block)
62
- end
63
-
64
- def baseline_box(resources = [nil], **params, &block)
65
- horizontal_box(resources, layout: "baseline", **params, &block)
66
- end
67
-
68
- # elements
69
- def text(message, **params)
70
- @flex_contents << {
71
- "type": "text",
72
- "text": message
73
- }.merge(params)
74
- end
75
-
76
- def image(url, **params)
77
- @flex_contents << {
78
- "type": "image",
79
- "url": url
80
- }.merge(params)
81
- end
82
-
83
- def icon(url, **params)
84
- @flex_contents << {
85
- "type": "image",
86
- "url": url
87
- }.merge(params)
88
- end
89
-
90
- def separator(**params)
91
- @flex_contents << {
92
- "type": "separator",
93
- "margin": "md",
94
- "color": "#000000",
95
- }.merge(params)
96
- end
97
-
98
- def spacer(**params)
99
- @flex_contents << {
100
- "type": "spacer",
101
- "size": "md",
102
- }.merge(params)
103
- end
104
-
105
- def url_button(label, url, **params)
106
- @flex_contents << {
107
- "type": "button",
108
- "action": {
109
- "type": "uri",
110
- "label": label,
111
- "uri": url
112
- }
113
- }.merge(params)
114
- end
115
-
116
- def message_button(label, message, **params)
117
- @flex_contents << {
118
- "type": "button",
119
- "action": {
120
- "type": "message",
121
- "label": label,
122
- "text": message
123
- }
124
- }.merge(params)
125
- end
126
-
127
- # actions
128
- def message_action(label, **params)
129
- {
130
- type: "message",
131
- label: label,
132
- text: label
133
- }.merge(params)
134
- end
135
-
136
- def uri_action(uri, **params)
137
- {
138
- type: "uri",
139
- label: uri[0...40],
140
- uri: uri,
141
- # altUri: {
142
- # desktop: uri
143
- # }
144
- }
145
- end
146
-
147
- private
148
-
149
- def flex_scope
150
- parent_attributes, parent_contents = @flex_attributes, @flex_contents
151
- @flex_attributes, @flex_contents = {}, []
152
- yield self
153
- [@flex_attributes, @flex_contents]
154
- ensure
155
- @flex_attributes, @flex_contents = parent_attributes, parent_contents
156
- end
157
- end
158
-
159
- class Kamiflex
7
+ module Kamiflex
160
8
  def self.build(parent)
161
- parent.class.include KamiflexModule
162
- yield
9
+ parent.class.include Kamiflex::Core
10
+ parent.class.include Kamiflex::BasicElements
11
+ parent.class.include Kamiflex::Actions
12
+ parent.class.include Kamiflex::QuickReply
13
+ JSON.pretty_generate yield
163
14
  end
164
15
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kamiflex
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
  - etrex kuo
@@ -36,6 +36,10 @@ files:
36
36
  - README.md
37
37
  - Rakefile
38
38
  - lib/kamiflex.rb
39
+ - lib/kamiflex/actions.rb
40
+ - lib/kamiflex/basic_elements.rb
41
+ - lib/kamiflex/core.rb
42
+ - lib/kamiflex/quick_reply.rb
39
43
  - lib/kamiflex/railtie.rb
40
44
  - lib/kamiflex/version.rb
41
45
  - lib/tasks/kamiflex_tasks.rake