0

私は次のコードがこれをどのように行うことができるかを理解しようとしています:

attr_accessor *Configuration::VALID_CONFIG_KEYS

構成ファイルを必要としません。コードの一部は次のとおりです。

require 'openamplify/analysis/context'
require 'openamplify/connection'
require 'openamplify/request'

module OpenAmplify
  # Provides access to the OpenAmplify API http://portaltnx20.openamplify.com/AmplifyWeb_v20/
  #
  # Basic usage of the library is to call supported methods via the Client class.
  #
  #   text = "After getting the MX1000 laser mouse and the Z-5500 speakers i fell in love with logitech"
  #   OpenAmplify::Client.new.amplify(text)

  class Client
    include OpenAmplify::Connection
    include OpenAmplify::Request

    attr_accessor *Configuration::VALID_CONFIG_KEYS

    def initialize(options={})
      merged_options = OpenAmplify.options.merge(options)
      Configuration::VALID_CONFIG_KEYS.each do |key|
        send("#{key}=", merged_options[key])
      end
    end
  ....
  end

そして、これは構成モジュールです。

require 'openamplify/version'

# TODO: output_format, analysis, scoring can be specied in the client and becomes the default unless overriden

module OpenAmplify
  # Defines constants and methods for configuring a client
  module Configuration
    VALID_CONNECTION_KEYS = [:endpoint, :user_agent, :method, :adapter].freeze
    VALID_OPTIONS_KEYS    = [:api_key, :analysis, :output_format, :scoring].freeze

    VALID_CONFIG_KEYS     = VALID_CONNECTION_KEYS + VALID_OPTIONS_KEYS

    DEFAULT_ENDPOINT      = 'http://portaltnx20.openamplify.com/AmplifyWeb_v21/AmplifyThis'
    DEFAULT_HTTP_METHOD   = :get
    DEFAULT_HTTP_ADAPTER  = :net_http
    DEFAULT_USER_AGENT    = "OpenAmplify Ruby Gem #{OpenAmplify::VERSION}".freeze

    DEFAULT_API_KEY       = nil
    DEFAULT_ANALYSIS      = :all
    DEFAULT_OUTPUT_FORMAT = :xml
    DEFAULT_SCORING       = :standard
    DEFAULT_SOURCE_URL    = nil
    DEFAULT_INPUT_TEXT    = nil

    attr_accessor *VALID_CONFIG_KEYS
  ....
 end

これはこのリポジトリからのものです: OpenAmplify

4

1 に答える 1

1

まず、configuration.rbclient.rbの両方で、同じネーミングスペース(モジュールOpenAmplify )を使用しています。

client.rbではconfiguration.rbは必要ありませんが、Rubyプロジェクトの規則では、通常、必要なすべてのファイルを1つのファイルに含める必要があります(通常は名前空間と同じ名前で、{ProjectName} / lib /に配置されます。この場合、ファイルはopenamplify/lib / openamplify.rbです)。

したがって、openamplify / lib / openamplify.rbにアクセスすると、実際にはこれら2つのファイルすべてが必要であることがわかります。

require 'openamplify/configuration'
require 'openamplify/client'

また、定数はconfiguration.rbですでに定義されているため、次のようになります。

module OpenAmplify
  module Configuration
    VALID_CONFIG_KEYS = ...
  end
end

次に、明らかに定数VALID_CONFIG_KEYSが同じモジュール(client.rbによって再度開かれるにConfiguration :: VALID_CONFIG_KEYSによって表示されます(VALID_CONFIG_KEYSはシンボルの配列であるため、前の*は配列の展開を意味します)

module OpenAmplify
  class Client
    attr_accessor *Configuration::VALID_CONFIG_KEYS
  end
end
于 2012-08-12T17:24:18.563 に答える