Rack::Affiliates 项目教程
rack-affiliates项目地址:https://gitcode.com/gh_mirrors/ra/rack-affiliates
1. 项目的目录结构及介绍
Rack::Affiliates 项目的目录结构如下:
rack-affiliates/
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── VERSION
├── lib/
│ ├── rack-affiliates.rb
│ └── rack-affiliates/
│ └── version.rb
├── rack-affiliates.gemspec
└── spec/
└── rack-affiliates_spec.rb
目录结构介绍
Gemfile
: 用于定义项目的依赖关系。LICENSE.txt
: 项目的许可证文件。README.md
: 项目的说明文档。Rakefile
: 用于定义 Rake 任务。VERSION
: 项目的版本号。lib/
: 包含项目的主要代码。rack-affiliates.rb
: 项目的主文件。rack-affiliates/
: 包含项目的子模块。version.rb
: 定义项目的版本号。
rack-affiliates.gemspec
: 项目的 gem 规范文件。spec/
: 包含项目的测试文件。rack-affiliates_spec.rb
: 项目的测试文件。
2. 项目的启动文件介绍
项目的启动文件是 lib/rack-affiliates.rb
。这个文件定义了 Rack::Affiliates 中间件的主要功能,包括如何从请求中提取 affiliate 信息并将其存储在 cookie 中。
require 'rack'
require 'rack/affiliates/version'
module Rack
class Affiliates
def initialize(app, options = {})
@app = app
@options = options
end
def call(env)
request = Rack::Request.new(env)
affiliate_tag = request.params[@options[:param] || 'ref']
if affiliate_tag
env['affiliate.tag'] = affiliate_tag
env['affiliate.from'] = request.referer
env['affiliate.time'] = Time.now.to_i
response = Rack::Response.new
response.set_cookie('affiliate.tag', value: affiliate_tag, path: '/')
response.set_cookie('affiliate.from', value: request.referer, path: '/')
response.set_cookie('affiliate.time', value: Time.now.to_i, path: '/')
status, headers, body = @app.call(env)
response.write(body)
response.finish
else
@app.call(env)
end
end
end
end
3. 项目的配置文件介绍
项目的配置文件主要是 rack-affiliates.gemspec
和 Gemfile
。
rack-affiliates.gemspec
这个文件定义了 gem 的规范,包括名称、版本、作者、描述、依赖等信息。
Gem::Specification.new do |spec|
spec.name = "rack-affiliates"
spec.version = Rack::Affiliates::VERSION
spec.authors = ["Alex Levin"]
spec.email = ["alex@example.com"]
spec.summary = %q{Rack middleware for affiliate tracking.}
spec.description = %q{Rack middleware that extracts information about referrals from affiliated sites.}
spec.homepage = "https://github.com/alexlevin/rack-affiliates"
spec.license = "MIT"
spec.files = `git ls-files`.split($/)
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.16"
spec.add_development_dependency "rake", "~> 10.0"
spec.add_development_dependency "rspec", "~> 3.0"
end
Gemfile
这个文件
rack-affiliates项目地址:https://gitcode.com/gh_mirrors/ra/rack-affiliates