lib/bobot/configuration.rb in bobot-1.0.53 vs lib/bobot/configuration.rb in bobot-2.1.0
- old
+ new
@@ -1,62 +1,9 @@
module Bobot
- # Defines constants and methods related to configuration
- module Configuration
- # An array of valid keys in the options hash when configuring
- VALID_CONFIGURATION_KEYS = %i[
- page_id
- app_id
- app_secret
- page_access_token
- verify_token
- domains
- debug_log
- async
- ].freeze
+ class Configuration
+ attr_accessor :app_id, :app_secret, :verify_token, :debug_log, :async, :pages
- # By default, don't set a facebook page id
- DEFAULT_PAGE_ID = nil
-
- # By default, don't set a facebook developper app id
- DEFAULT_APP_ID = nil
-
- # By default, don't set a facebook developper app secret
- DEFAULT_APP_SECRET = nil
-
- # By default, don't set a facebook developper page access token
- DEFAULT_PAGE_ACCESS_TOKEN = nil
-
- # By default, don't set a facebook webhook_verify_token
- DEFAULT_VERIFY_TOKEN = nil
-
- # By default, don't set a facebook whitelisting domains
- DEFAULT_DOMAINS = nil
-
- # By default, debug log is to false
- DEFAULT_DEBUG_LOG = false
-
- # By default, async is to false
- DEFAULT_ASYNC = false
-
- # @private
- attr_accessor(*VALID_CONFIGURATION_KEYS)
-
- # Our host application root path
- # We set this when the engine is initialized
- mattr_accessor :app_root
-
- # When this module is extended, set all configuration options to their default values
- def self.extended(base)
- base.reset!
- end
-
- # Convenience method to allow configuration options to be set in a block
- def configure
- yield self
- end
-
- # Custom self assignments
def domains=(rhs)
return unless rhs.present?
if rhs.respond_to?(:to_str)
@domains = rhs.split(",").map(&:strip)
elsif rhs.is_a?(Array)
@@ -64,169 +11,185 @@
else
raise Bobot::InvalidParameter.new(:domains, "should be a string or an array")
end
end
- # Create a hash of options and their values
- def configurations
- VALID_CONFIGURATION_KEYS.inject({}) do |option, key|
- option.merge!(key => send(key))
- end
+ def find_page_by_id(page_id)
+ pages.find { |page| page.page_id == page_id }
end
- # Reset all configuration options to defaults
- def reset!
- self.page_id = DEFAULT_PAGE_ID
- self.app_id = DEFAULT_APP_ID
- self.app_secret = DEFAULT_APP_SECRET
- self.page_access_token = DEFAULT_PAGE_ACCESS_TOKEN
- self.verify_token = DEFAULT_VERIFY_TOKEN
- self.domains = DEFAULT_DOMAINS
- self.debug_log = DEFAULT_DEBUG_LOG
- self.async = DEFAULT_ASYNC
+ def find_page_by_slug(slug)
+ pages.find { |page| page.slug == slug }
end
- def update_facebook_setup!
- subscribe_to_facebook_page!
- set_greeting_text!
- set_whitelist_domains!
- set_get_started_button!
- set_persistent_menu!
- end
+ class Page
+ attr_accessor :slug, :language, :page_id, :page_access_token
- ## == Subcribe your bot to your page ==
- def subscribe_to_facebook_page!
- raise Bobot::InvalidParameter.new(:page_id) unless Bobot.page_id.present?
- raise Bobot::InvalidParameter.new(:access_token) unless Bobot.page_access_token.present?
- Bobot::Subscription.set(
- query: {
- page_id: Bobot.page_id,
- access_token: Bobot.page_access_token,
- },
- )
- end
+ def initialize(options = {})
+ self.slug = options[:slug]
+ self.language = options[:language]
+ self.page_id = options[:page_id]
+ self.page_access_token = options[:page_access_token]
+ end
- ## == Unsubcribe your bot from your page ==
- def unsubscribe_to_facebook_page!
- raise Bobot::InvalidParameter.new(:page_id) unless Bobot.page_id.present?
- raise Bobot::InvalidParameter.new(:access_token) unless Bobot.page_access_token.present?
- Bobot::Subscription.unset(
- query: {
- page_id: Bobot.page_id,
- access_token: Bobot.page_access_token,
- },
- )
- end
+ def update_facebook_setup!
+ subscribe_to_facebook_page!
+ set_greeting_text!
+ set_whitelist_domains!
+ set_get_started_button!
+ set_persistent_menu!
+ end
- ## == Set bot description (only displayed on first time). ==
- def set_greeting_text!
- raise Bobot::InvalidParameter.new(:access_token) unless Bobot.page_access_token.present?
- greeting_texts = []
- # Default text
- greeting_text = I18n.t('bobot.config.greeting_text', locale: I18n.default_locale, default: nil)
- if greeting_text.present?
- greeting_texts << {
- locale: 'default',
- text: greeting_text,
- }
+ ## == Subcribe your bot to your page ==
+ def subscribe_to_facebook_page!
+ raise Bobot::InvalidParameter.new(:page_id) unless page_id.present?
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
+ Bobot::Subscription.set(
+ query: {
+ page_id: page_id,
+ access_token: page_access_token,
+ },
+ )
end
- # Each languages
- I18n.available_locales.each do |locale|
- greeting_text = I18n.t('bobot.config.greeting_text', locale: locale, default: nil)
- next unless greeting_text.present?
- facebook_locales = I18n.t('bobot.config.facebook_locales', locale: locale, default: nil)
- facebook_locales.to_a.each do |locale_long|
- greeting_texts << { locale: locale_long, text: greeting_text }
+
+ ## == Unsubcribe your bot from your page ==
+ def unsubscribe_to_facebook_page!
+ raise Bobot::InvalidParameter.new(:page_id) unless page_id.present?
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
+ Bobot::Subscription.unset(
+ query: {
+ page_id: page_id,
+ access_token: page_access_token,
+ },
+ )
+ end
+
+ ## == Set bot description (only displayed on first time). ==
+ def set_greeting_text!
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
+ greeting_texts = []
+ # Default text
+ greeting_text = I18n.t("bobot.#{slug}.config.greeting_text", locale: I18n.default_locale, default: nil)
+ greeting_texts << { locale: 'default', text: greeting_text } if greeting_text.present?
+ # Each languages
+ I18n.available_locales.each do |locale|
+ greeting_text = I18n.t("bobot.#{slug}.config.greeting_text", locale: locale, default: nil)
+ next unless greeting_text.present?
+ facebook_locales = I18n.t("bobot.#{slug}.config.facebook_locales", locale: locale, default: nil)
+ facebook_locales.to_a.each do |locale_long|
+ greeting_texts << { locale: locale_long, text: greeting_text }
+ end
end
+ if greeting_texts.present?
+ Bobot::Profile.set(
+ body: { greeting: greeting_texts },
+ query: { access_token: page_access_token },
+ )
+ else
+ unset_greeting_text!
+ end
end
- if greeting_texts.present?
- Bobot::Profile.set(
- body: { greeting: greeting_texts },
- query: { access_token: Bobot.page_access_token },
- )
- else
+
+ def unset_greeting_text!
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
Bobot::Profile.unset(
- body: { fields: ["greeting"] },
- query: { access_token: Bobot.page_access_token },
- )
+ body: { fields: %w[greeting] },
+ query: { access_token: page_access_token },
+ )
end
- end
- ## == Set bot whitelist domains (only displayed on first time) ==
- ## == Some features like Messenger Extensions and Checkbox Plugin require ==
- ## == a page to specify a domain whitelist. ==
- def set_whitelist_domains!
- raise Bobot::InvalidParameter.new(:access_token) unless Bobot.page_access_token.present?
- raise Bobot::InvalidParameter.new(:domains) unless Bobot.domains.present?
- if Bobot.domains.present?
- Bobot::Profile.set(
- body: { whitelisted_domains: Bobot.domains },
- query: { access_token: Bobot.page_access_token },
- )
- else
+ ## == Set bot whitelist domains (only displayed on first time) ==
+ ## == Some features like Messenger Extensions and Checkbox Plugin require ==
+ ## == a page to specify a domain whitelist. ==
+ def set_whitelist_domains!
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
+ raise Bobot::InvalidParameter.new(:domains) unless domains.present?
+ if domains.present?
+ Bobot::Profile.set(
+ body: { whitelisted_domains: domains },
+ query: { access_token: page_access_token },
+ )
+ else
+ unset_whitelist_domains!
+ end
+ end
+
+ def unset_whitelist_domains!
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
+ raise Bobot::InvalidParameter.new(:domains) unless domains.present?
Bobot::Profile.unset(
body: { fields: ["whitelisted_domains"] },
- query: { access_token: Bobot.page_access_token },
- )
+ query: { access_token: page_access_token },
+ )
end
- end
- ## == You can define the action to trigger when new humans click on ==
- ## == the Get Started button. Before doing it you should check to select the ==
- ## == messaging_postbacks field when setting up your webhook. ==
- def set_get_started_button!
- raise Bobot::InvalidParameter.new(:access_token) unless Bobot.page_access_token.present?
- if I18n.exists?('bobot.config.get_started.payload')
- Bobot::Profile.set(
- body: { get_started: { payload: I18n.t('bobot.config.get_started.payload') } },
- query: { access_token: Bobot.page_access_token },
- )
- else
+ ## == You can define the action to trigger when new humans click on ==
+ ## == the Get Started button. Before doing it you should check to select the ==
+ ## == messaging_postbacks field when setting up your webhook. ==
+ def set_get_started_button!
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
+ if I18n.exists?("bobot.#{slug}.config.get_started.payload")
+ Bobot::Profile.set(
+ body: { get_started: { payload: I18n.t("bobot.#{slug}.config.get_started.payload") } },
+ query: { access_token: page_access_token },
+ )
+ else
+ unset_get_started_button!
+ end
+ end
+
+ def unset_get_started_button!
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
Bobot::Profile.unset(
- body: { fields: ["persistent_menu", "get_started"] },
- query: { access_token: Bobot.page_access_token },
+ body: { fields: %w[persistent_menu get_started] },
+ query: { access_token: page_access_token },
)
end
- end
- ## == You can show a persistent menu to humans. ==
- ## == If you want to have a persistent menu, you have to set get_started ==
- ## == button before. ==
- def set_persistent_menu!
- raise Bobot::InvalidParameter.new(:access_token) unless Bobot.page_access_token.present?
- persistent_menus = []
- # Default text
- persistent_menu = I18n.t('bobot.config.persistent_menu', locale: I18n.default_locale, default: nil)
- if persistent_menu.present?
- persistent_menus << {
- locale: 'default',
- composer_input_disabled: persistent_menu[:composer_input_disabled],
- call_to_actions: persistent_menu[:call_to_actions],
- }
- end
- # Each languages
- I18n.available_locales.each do |locale|
- persistent_menu = I18n.t('bobot.config.persistent_menu', locale: locale, default: nil)
- facebook_locales = I18n.t('bobot.config.facebook_locales', locale: locale, default: nil)
- next unless persistent_menu.present?
- facebook_locales.to_a.each do |locale_long|
+ ## == You can show a persistent menu to humans. ==
+ ## == If you want to have a persistent menu, you have to set get_started ==
+ ## == button before. ==
+ def set_persistent_menu!
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
+ persistent_menus = []
+ # Default text
+ persistent_menu = I18n.t("bobot.#{slug}.config.persistent_menu", locale: I18n.default_locale, default: nil)
+ if persistent_menu.present?
persistent_menus << {
- locale: locale_long,
+ locale: 'default',
composer_input_disabled: persistent_menu[:composer_input_disabled],
call_to_actions: persistent_menu[:call_to_actions],
}
end
+ # Each languages
+ I18n.available_locales.each do |locale|
+ persistent_menu = I18n.t("bobot.#{slug}.config.persistent_menu", locale: locale, default: nil)
+ facebook_locales = I18n.t("bobot.#{slug}.config.facebook_locales", locale: locale, default: nil)
+ next unless persistent_menu.present?
+ facebook_locales.to_a.each do |locale_long|
+ persistent_menus << {
+ locale: locale_long,
+ composer_input_disabled: persistent_menu[:composer_input_disabled],
+ call_to_actions: persistent_menu[:call_to_actions],
+ }
+ end
+ end
+ if persistent_menus.present?
+ Bobot::Profile.set(
+ body: { persistent_menu: persistent_menus },
+ query: { access_token: page_access_token },
+ )
+ else
+ unset_persistent_menu!
+ end
end
- if persistent_menus.present?
- Bobot::Profile.set(
- body: { persistent_menu: persistent_menus },
- query: { access_token: Bobot.page_access_token },
- )
- else
+
+ def unset_persistent_menu!
+ raise Bobot::InvalidParameter.new(:access_token) unless page_access_token.present?
Bobot::Profile.unset(
body: { fields: ["persistent_menu"] },
- query: { access_token: Bobot.page_access_token },
- )
+ query: { access_token: page_access_token },
+ )
end
end
end
end