apps 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/README.md +103 -19
- data/bin/setup +1 -2
- data/exe/apps +0 -0
- data/lib/apps/common/schema.rb +8 -0
- data/lib/apps/common/schema/base.rb +91 -0
- data/lib/apps/common/schema/concerns.rb +10 -0
- data/lib/apps/common/schema/concerns/potential_action.rb +35 -0
- data/lib/apps/gmail/markup.rb +158 -0
- data/lib/apps/gmail/schema.rb +21 -0
- data/lib/apps/gmail/schema/action.rb +19 -0
- data/lib/apps/gmail/schema/confirm_action.rb +21 -0
- data/lib/apps/gmail/schema/email_message.rb +15 -0
- data/lib/apps/gmail/schema/event.rb +41 -0
- data/lib/apps/gmail/schema/parcel_delivery.rb +43 -0
- data/lib/apps/gmail/schema/place.rb +24 -0
- data/lib/apps/gmail/schema/postal_address.rb +22 -0
- data/lib/apps/gmail/schema/rsvp_action.rb +25 -0
- data/lib/apps/gmail/schema/save_action.rb +20 -0
- data/lib/apps/gmail/schema/track_action.rb +20 -0
- data/lib/apps/gmail/schema/view_action.rb +20 -0
- data/lib/apps/outlook/actionable_messages.rb +13 -0
- data/lib/apps/outlook/schema.rb +20 -0
- data/lib/apps/outlook/schema/action.rb +14 -0
- data/lib/apps/outlook/schema/action_card.rb +42 -0
- data/lib/apps/outlook/schema/concerns.rb +14 -0
- data/lib/apps/outlook/schema/concerns/sections.rb +27 -0
- data/lib/apps/outlook/schema/concerns/sorted_potential_action.rb +17 -0
- data/lib/apps/outlook/schema/date_input.rb +17 -0
- data/lib/apps/outlook/schema/http_post.rb +44 -0
- data/lib/apps/outlook/schema/input.rb +23 -0
- data/lib/apps/outlook/schema/invoke_add_in_command.rb +33 -0
- data/lib/apps/outlook/schema/message_card.rb +39 -0
- data/lib/apps/outlook/schema/multichoice_input.rb +32 -0
- data/lib/apps/outlook/schema/open_uri.rb +24 -0
- data/lib/apps/outlook/schema/section.rb +52 -0
- data/lib/apps/outlook/schema/text_input.rb +20 -0
- data/lib/apps/version.rb +4 -1
- data/lib/examples.rb +121 -0
- data/package.json +12 -0
- metadata +37 -16
- data/lib/apps/adapters/gmail/markup.rb +0 -42
- data/lib/apps/adapters/gmail/markup/action.rb +0 -23
- data/lib/apps/adapters/gmail/markup/base.rb +0 -37
- data/lib/apps/adapters/gmail/markup/base_context.rb +0 -23
- data/lib/apps/adapters/gmail/markup/confirm_action.rb +0 -23
- data/lib/apps/adapters/gmail/markup/email_message.rb +0 -22
- data/lib/apps/adapters/gmail/markup/event.rb +0 -40
- data/lib/apps/adapters/gmail/markup/parcel_delivery.rb +0 -47
- data/lib/apps/adapters/gmail/markup/place.rb +0 -27
- data/lib/apps/adapters/gmail/markup/postal_address.rb +0 -26
- data/lib/apps/adapters/gmail/markup/rsvp_action.rb +0 -27
- data/lib/apps/adapters/gmail/markup/save_action.rb +0 -22
- data/lib/apps/adapters/gmail/markup/track_action.rb +0 -24
- data/lib/apps/adapters/gmail/markup/view_action.rb +0 -24
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Van Horn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -74,21 +74,42 @@ files:
|
|
74
74
|
- bin/setup
|
75
75
|
- exe/apps
|
76
76
|
- lib/apps.rb
|
77
|
-
- lib/apps/
|
78
|
-
- lib/apps/
|
79
|
-
- lib/apps/
|
80
|
-
- lib/apps/
|
81
|
-
- lib/apps/
|
82
|
-
- lib/apps/
|
83
|
-
- lib/apps/
|
84
|
-
- lib/apps/
|
85
|
-
- lib/apps/
|
86
|
-
- lib/apps/
|
87
|
-
- lib/apps/
|
88
|
-
- lib/apps/
|
89
|
-
- lib/apps/
|
90
|
-
- lib/apps/
|
77
|
+
- lib/apps/common/schema.rb
|
78
|
+
- lib/apps/common/schema/base.rb
|
79
|
+
- lib/apps/common/schema/concerns.rb
|
80
|
+
- lib/apps/common/schema/concerns/potential_action.rb
|
81
|
+
- lib/apps/gmail/markup.rb
|
82
|
+
- lib/apps/gmail/schema.rb
|
83
|
+
- lib/apps/gmail/schema/action.rb
|
84
|
+
- lib/apps/gmail/schema/confirm_action.rb
|
85
|
+
- lib/apps/gmail/schema/email_message.rb
|
86
|
+
- lib/apps/gmail/schema/event.rb
|
87
|
+
- lib/apps/gmail/schema/parcel_delivery.rb
|
88
|
+
- lib/apps/gmail/schema/place.rb
|
89
|
+
- lib/apps/gmail/schema/postal_address.rb
|
90
|
+
- lib/apps/gmail/schema/rsvp_action.rb
|
91
|
+
- lib/apps/gmail/schema/save_action.rb
|
92
|
+
- lib/apps/gmail/schema/track_action.rb
|
93
|
+
- lib/apps/gmail/schema/view_action.rb
|
94
|
+
- lib/apps/outlook/actionable_messages.rb
|
95
|
+
- lib/apps/outlook/schema.rb
|
96
|
+
- lib/apps/outlook/schema/action.rb
|
97
|
+
- lib/apps/outlook/schema/action_card.rb
|
98
|
+
- lib/apps/outlook/schema/concerns.rb
|
99
|
+
- lib/apps/outlook/schema/concerns/sections.rb
|
100
|
+
- lib/apps/outlook/schema/concerns/sorted_potential_action.rb
|
101
|
+
- lib/apps/outlook/schema/date_input.rb
|
102
|
+
- lib/apps/outlook/schema/http_post.rb
|
103
|
+
- lib/apps/outlook/schema/input.rb
|
104
|
+
- lib/apps/outlook/schema/invoke_add_in_command.rb
|
105
|
+
- lib/apps/outlook/schema/message_card.rb
|
106
|
+
- lib/apps/outlook/schema/multichoice_input.rb
|
107
|
+
- lib/apps/outlook/schema/open_uri.rb
|
108
|
+
- lib/apps/outlook/schema/section.rb
|
109
|
+
- lib/apps/outlook/schema/text_input.rb
|
91
110
|
- lib/apps/version.rb
|
111
|
+
- lib/examples.rb
|
112
|
+
- package.json
|
92
113
|
homepage: https://github.com/joelvh/apps
|
93
114
|
licenses:
|
94
115
|
- MIT
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require_relative 'markup/event'
|
2
|
-
require_relative 'markup/email_message'
|
3
|
-
require_relative 'markup/parcel_delivery'
|
4
|
-
require_relative 'markup/confirm_action'
|
5
|
-
require_relative 'markup/save_action'
|
6
|
-
require_relative 'markup/view_action'
|
7
|
-
require_relative 'markup/track_action'
|
8
|
-
|
9
|
-
module Apps
|
10
|
-
module Adapters
|
11
|
-
module Gmail
|
12
|
-
module Markup
|
13
|
-
class << self
|
14
|
-
def build_confirm_action(description: nil, **attrs)
|
15
|
-
EmailMessage.new(description: description, action: ConfirmAction.new(**attrs))
|
16
|
-
end
|
17
|
-
|
18
|
-
def build_save_action(description: nil, **attrs)
|
19
|
-
EmailMessage.new(description: description, action: SaveAction.new(**attrs))
|
20
|
-
end
|
21
|
-
|
22
|
-
def build_rsvp_action(**attrs)
|
23
|
-
Event.new(**attrs).tap do |event|
|
24
|
-
event.build_location unless event.location
|
25
|
-
event.build_rsvp_actions unless event.actions.any?
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def build_view_action(target: nil, **attrs)
|
30
|
-
EmailMessage.new(action: ViewAction.new(target: target), **attrs)
|
31
|
-
end
|
32
|
-
|
33
|
-
def build_track_action(target: nil, **attrs)
|
34
|
-
ParcelDelivery.new(action: TrackAction.new(target: target), **attrs).tap do |email|
|
35
|
-
email.build_delivery_address unless email.delivery_address
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require_relative 'base'
|
2
|
-
|
3
|
-
module Apps
|
4
|
-
module Adapters
|
5
|
-
module Gmail
|
6
|
-
module Markup
|
7
|
-
class Action < Base
|
8
|
-
|
9
|
-
attr_accessor :handler_url
|
10
|
-
|
11
|
-
def as_json
|
12
|
-
prune super.merge(
|
13
|
-
"handler" => {
|
14
|
-
"@type" => "HttpActionHandler",
|
15
|
-
"url" => handler_url
|
16
|
-
}
|
17
|
-
)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
|
-
module Apps
|
4
|
-
module Adapters
|
5
|
-
module Gmail
|
6
|
-
module Markup
|
7
|
-
class Base
|
8
|
-
def initialize(**attrs)
|
9
|
-
attrs.each do |name, value|
|
10
|
-
next if value.nil?
|
11
|
-
|
12
|
-
instance_variable_set(:"@#{name}", value)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def type
|
17
|
-
@type ||= self.class.name.split('::')[-1]
|
18
|
-
end
|
19
|
-
|
20
|
-
def as_json
|
21
|
-
{ "@type" => type }
|
22
|
-
end
|
23
|
-
|
24
|
-
def to_json(pretty: false)
|
25
|
-
pretty ? JSON.pretty_generate(as_json) : JSON.dump(as_json)
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
|
30
|
-
def prune(hash)
|
31
|
-
hash.reject { |_, value| value.nil? }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require_relative 'base'
|
2
|
-
|
3
|
-
module Apps
|
4
|
-
module Adapters
|
5
|
-
module Gmail
|
6
|
-
module Markup
|
7
|
-
class BaseContext < Base
|
8
|
-
def as_json
|
9
|
-
{ "@context" => "http://schema.org" }.merge(super)
|
10
|
-
end
|
11
|
-
|
12
|
-
def to_script
|
13
|
-
buffer = []
|
14
|
-
buffer << %{<script type="application/ld+json">}
|
15
|
-
buffer << to_json(pretty: true)
|
16
|
-
buffer << %{</script>}
|
17
|
-
buffer.join("\n")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require_relative 'action'
|
2
|
-
|
3
|
-
module Apps
|
4
|
-
module Adapters
|
5
|
-
module Gmail
|
6
|
-
module Markup
|
7
|
-
# See: https://developers.google.com/gmail/markup/reference/one-click-action
|
8
|
-
# See: https://developers.google.com/gmail/markup/reference/types/ConfirmAction
|
9
|
-
class ConfirmAction < Action
|
10
|
-
|
11
|
-
attr_accessor :name, :confirmed
|
12
|
-
|
13
|
-
def as_json
|
14
|
-
prune super.merge(
|
15
|
-
"name" => name,
|
16
|
-
"confirmed" => confirmed&.as_json # Thing
|
17
|
-
)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require_relative 'base_context'
|
2
|
-
|
3
|
-
module Apps
|
4
|
-
module Adapters
|
5
|
-
module Gmail
|
6
|
-
module Markup
|
7
|
-
class EmailMessage < BaseContext
|
8
|
-
|
9
|
-
attr_reader :action
|
10
|
-
attr_accessor :description, :publisher
|
11
|
-
|
12
|
-
def as_json
|
13
|
-
prune super.merge(
|
14
|
-
"potentialAction" => action&.as_json,
|
15
|
-
"publisher" => publisher&.as_json # Organization
|
16
|
-
)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require_relative 'base_context'
|
2
|
-
require_relative 'rsvp_action'
|
3
|
-
require_relative 'place'
|
4
|
-
|
5
|
-
module Apps
|
6
|
-
module Adapters
|
7
|
-
module Gmail
|
8
|
-
module Markup
|
9
|
-
class Event < BaseContext
|
10
|
-
|
11
|
-
attr_accessor :name, :start_date, :end_date, :location
|
12
|
-
|
13
|
-
def as_json
|
14
|
-
prune super.merge(
|
15
|
-
"name" => name,
|
16
|
-
"startDate" => start_date,
|
17
|
-
"endDate" => end_date,
|
18
|
-
"location" => location&.as_json,
|
19
|
-
"potentialAction" => actions.map(&:as_json)
|
20
|
-
)
|
21
|
-
end
|
22
|
-
|
23
|
-
def actions
|
24
|
-
@actions ||= []
|
25
|
-
end
|
26
|
-
|
27
|
-
def build_location(**attrs)
|
28
|
-
self.location = Place.new(**attrs).tap do |place|
|
29
|
-
place.build_address unless place.address
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def build_rsvp_actions
|
34
|
-
actions.clear.concat(%w[Yes No Maybe].map { |response| RsvpAction.new(response: response) })
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require_relative 'base_context'
|
2
|
-
require_relative 'postal_address'
|
3
|
-
|
4
|
-
module Apps
|
5
|
-
module Adapters
|
6
|
-
module Gmail
|
7
|
-
module Markup
|
8
|
-
class ParcelDelivery < BaseContext
|
9
|
-
|
10
|
-
attr_reader :action
|
11
|
-
attr_accessor :delivery_address, :expected_arrival_until, :carrier_name
|
12
|
-
attr_accessor :product_name, :order_number, :merchant_name
|
13
|
-
attr_accessor :tracking_url
|
14
|
-
|
15
|
-
def as_json
|
16
|
-
prune super.merge(
|
17
|
-
"deliveryAddress" => delivery_address&.as_json,
|
18
|
-
"expectedArrivalUntil" => expected_arrival_until,
|
19
|
-
"carrier" => {
|
20
|
-
"@type" => "Organization",
|
21
|
-
"name" => carrier_name
|
22
|
-
},
|
23
|
-
"itemShipped" => {
|
24
|
-
"@type" => "Product",
|
25
|
-
"name" => product_name
|
26
|
-
},
|
27
|
-
"partOfOrder" => {
|
28
|
-
"@type" => "Order",
|
29
|
-
"orderNumber" => order_number,
|
30
|
-
"merchant" => {
|
31
|
-
"@type" => "Organization",
|
32
|
-
"name" => merchant_name
|
33
|
-
}
|
34
|
-
},
|
35
|
-
"trackingUrl" => tracking_url,
|
36
|
-
"potentialAction" => action&.as_json
|
37
|
-
)
|
38
|
-
end
|
39
|
-
|
40
|
-
def build_delivery_address(**attrs)
|
41
|
-
self.delivery_address = PostalAddress.new(**attrs)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require_relative 'base'
|
2
|
-
require_relative 'postal_address'
|
3
|
-
|
4
|
-
module Apps
|
5
|
-
module Adapters
|
6
|
-
module Gmail
|
7
|
-
module Markup
|
8
|
-
class Place < Base
|
9
|
-
|
10
|
-
attr_accessor :name, :same_as, :address
|
11
|
-
|
12
|
-
def as_json
|
13
|
-
prune super.merge(
|
14
|
-
"sameAs" => same_as,
|
15
|
-
"name" => name,
|
16
|
-
"address" => address&.as_json
|
17
|
-
)
|
18
|
-
end
|
19
|
-
|
20
|
-
def build_address(**attrs)
|
21
|
-
self.address = PostalAddress.new(**attrs)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require_relative 'base'
|
2
|
-
|
3
|
-
module Apps
|
4
|
-
module Adapters
|
5
|
-
module Gmail
|
6
|
-
module Markup
|
7
|
-
class PostalAddress < Base
|
8
|
-
|
9
|
-
attr_accessor :name, :street, :locality, :region, :po_box, :postal_code, :country
|
10
|
-
|
11
|
-
def as_json
|
12
|
-
prune super.merge(
|
13
|
-
"name" => name,
|
14
|
-
"streetAddress" => street, # street address
|
15
|
-
"addressLocality" => locality, # city
|
16
|
-
"addressRegion" => region, # state (abbr)
|
17
|
-
"postOfficeBoxNumber" => po_box,
|
18
|
-
"postalCode" => postal_code, # zip code
|
19
|
-
"addressCountry" => country
|
20
|
-
)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require_relative 'action'
|
2
|
-
|
3
|
-
module Apps
|
4
|
-
module Adapters
|
5
|
-
module Gmail
|
6
|
-
module Markup
|
7
|
-
# See: https://developers.google.com/gmail/markup/reference/rsvp-action
|
8
|
-
class RsvpAction < Action
|
9
|
-
|
10
|
-
attr_accessor :response, :additional_number_of_guests, :bringing_kids, :bringing_other_people
|
11
|
-
|
12
|
-
def as_json
|
13
|
-
prune super.merge(
|
14
|
-
"rsvpResponse" => response.downcase,
|
15
|
-
"additionalNumberOfGuests" => additional_number_of_guests&.to_i,
|
16
|
-
"bringingKids" => bringing_kids&.to_i,
|
17
|
-
"bringingOtherPeople" => bringing_other_people&.to_i,
|
18
|
-
# "comment" => {},
|
19
|
-
# "event" => {},
|
20
|
-
"attendance" => "http://schema.org/RsvpAttendance/#{response.capitalize}"
|
21
|
-
)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require_relative 'action'
|
2
|
-
|
3
|
-
module Apps
|
4
|
-
module Adapters
|
5
|
-
module Gmail
|
6
|
-
module Markup
|
7
|
-
# See: https://developers.google.com/gmail/markup/reference/one-click-action
|
8
|
-
# See: https://developers.google.com/gmail/markup/reference/types/SaveAction
|
9
|
-
class SaveAction < Action
|
10
|
-
|
11
|
-
attr_accessor :name
|
12
|
-
|
13
|
-
def as_json
|
14
|
-
prune super.merge(
|
15
|
-
"name" => name
|
16
|
-
)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|