ad_space 0.1.6 → 0.1.8

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: f5fd64d01bfc45cc173f1e95fbaea9b6ac23291e37feb5c072f7f9477bb651ce
4
- data.tar.gz: 21c7b3e8506219e0bf6f6ad2c979b1ee2de5d71cb56d4804b8948cfebc958d64
3
+ metadata.gz: 9c294841e4e377ecf99cc3aa8f3f42ac3a9800eb88ee17ae37351ba9087b8f8b
4
+ data.tar.gz: 435767755057233d635c962149960a1b7f6b87dfa30bc2cc31743309b4a64686
5
5
  SHA512:
6
- metadata.gz: c8e5f37efeaf85765b65ae4c5d487fec4df002bbcc5074edaa1501fe88c80daf2c30092ec2b44265473dc1b6b8bdafb723539321e4c85afa2f304cfd52d9665b
7
- data.tar.gz: 5bb47c04044cf966c4a7b6f65a98213a9e61cb61ad2bffd2ac689f67f726f8f69bec23cf3c591babcc7c2f9622bc6a60684674cf14461cf9fb0a234a07dfa93a
6
+ metadata.gz: 1c9737924bd24df44e888663f41c7651d009a1860d77754ae943cffdb9e93e630dba0458207d44759f20a1b666a3a45298f715e53897c44d13ec2c40c04edae9
7
+ data.tar.gz: f79ae7773402d55979462e9dfab97481b2a8bd3a645bd22c964c79e65751d37d6a620fe19d2fc51dcf9f6091468cd4bbc0b0573e33d9ca12e423b5873e25e7fe
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ad_space (0.1.6)
4
+ ad_space (0.1.8)
5
5
  active_model_serializers
6
6
  dotenv-rails
7
7
  rails (>= 7.1.1)
data/README.md CHANGED
@@ -91,8 +91,6 @@ mount AdSpace::Engine => "/ad_space"
91
91
  ## TODO
92
92
  - 预览广告功能,支持参数可以直接在手机端拉取自定广告,展示在特定的位置
93
93
  - 效果指标统计功能,ai 方案,计算成本
94
- - slot 编码 弄小一点,uuid 都弄小点
95
- - uuid 改为 trace_id 追踪码?
96
94
  - 各个指标如何统计
97
95
  - 异步任务规则,打点,异步通过阿里云日志写回,sidekiq 测试
98
96
  - tacker id 跟阿里云 获取统计 异步结算
@@ -106,3 +104,9 @@ mount AdSpace::Engine => "/ad_space"
106
104
  - 操作 调整UI
107
105
  - toast 消息
108
106
  - tailwindcss
107
+ - 平台 标题 开始时间 结束时间 位置 广告类型 可见性 目标版本
108
+
109
+ ```
110
+ ip, datetime ad_id, impressions, device_id ,platform, version_code, version_name, channel, user_id
111
+ ip, datetime ad_id, clicks, device_id, platform, version_code, version_name, channel, user_id
112
+ ```
@@ -4,8 +4,7 @@ class AdSpace::Api::V1::AdvertisementsController < ActionController::API
4
4
  def index
5
5
  builder = AdSpace::Advertisement.includes(:slot).where(platform: params[:platform])
6
6
  builder = builder.published.unexpired
7
- builder = builder.where(slot_id: params[:slot_ids].split(",")) unless params[:slot_ids].blank?
8
-
7
+ builder = builder.joins(:slot).where("ad_space_slots.uuid": params[:slot_ids].split(",")) unless params[:slot_ids].blank?
9
8
  # TODO: 动态可配置,不同项目可以自定义特殊的查询条件,基于builder
10
9
  # 0. 判断是否有配置动态用户信息,proc
11
10
  # 1. 通过token获取用户信息 proc
@@ -38,8 +38,20 @@ module AdSpace
38
38
  archived_at.present?
39
39
  end
40
40
 
41
+ def dsp_ad?
42
+ ad_type == "dsp"
43
+ end
44
+
45
+ def custom_ad?
46
+ ad_type == "custom"
47
+ end
48
+
49
+ def trace_id
50
+ uuid
51
+ end
52
+
41
53
  def cover_url(size = nil)
42
- if object.splash?
54
+ if self.splash?
43
55
  return cover_sm.attached? ? cover_sm.url : nil if size == 'little'
44
56
  return cover_md.attached? ? cover_md.url : nil if size == 'middle'
45
57
  return cover_lg.attached? ? cover_lg.url : nil if size == 'large'
@@ -59,7 +71,9 @@ module AdSpace
59
71
  def generate_uuid
60
72
  if self.uuid.blank?
61
73
  begin
62
- self.uuid = SecureRandom.uuid
74
+ characters = ('a'..'z').to_a + ('0'..'9').to_a
75
+ random_string = Array.new(4) { characters.sample }.join
76
+ self.uuid = random_string
63
77
  end while self.class.exists?(uuid: uuid)
64
78
  end
65
79
  end
@@ -19,9 +19,11 @@ module AdSpace
19
19
  def generate_uuid
20
20
  if self.uuid.blank?
21
21
  begin
22
- self.uuid = SecureRandom.uuid
22
+ characters = ('a'..'z').to_a + ('0'..'9').to_a
23
+ random_string = Array.new(4) { characters.sample }.join
24
+ self.uuid = random_string
23
25
  end while self.class.exists?(uuid: uuid)
24
26
  end
25
27
  end
26
28
  end
27
- end
29
+ end
@@ -2,16 +2,16 @@
2
2
 
3
3
  module V1
4
4
  class AdvertisementSerializer < ActiveModel::Serializer
5
- attributes :uuid, :started_at, :ended_at, :slot, :ad_type, :visibility
5
+ attributes :trace_id, :started_at, :ended_at, :slot_id, :ad_type, :visibility, :weight
6
6
 
7
- attribute :scheme_url, if: -> { object.ad_type == :custom }
8
- attribute :image_url, if: -> { object.ad_type == :custom }
9
- attribute :dsp_type, if: -> { object.ad_type == :dsp }
7
+ attribute :scheme_url, if: -> { object.custom_ad? }
8
+ attribute :image_url, if: -> { object.custom_ad? }
9
+ attribute :dsp_type, if: -> { object.dsp_ad? }
10
10
 
11
11
  attribute :splash_ui_type, if: -> { object.splash? }
12
12
  attribute :splash_countdown, if: -> { object.splash? }
13
13
 
14
- def slot
14
+ def slot_id
15
15
  object.slot.uuid
16
16
  end
17
17
 
@@ -20,11 +20,12 @@ module V1
20
20
  end
21
21
 
22
22
  def ended_at
23
- object.started_at.to_i
23
+ object.ended_at.to_i
24
24
  end
25
25
 
26
26
  def image_url
27
27
  object.cover_url(instance_options[:size])
28
28
  end
29
29
  end
30
- end
30
+ end
31
+
@@ -15,6 +15,9 @@ class UrlOrCustomSchemeValidator < ActiveModel::EachValidator
15
15
  end
16
16
 
17
17
  def valid_custom_scheme?(value)
18
- value =~ /\A\w+:\/\/\w+\z/
18
+ uri = URI.parse(value)
19
+ uri.scheme.present? && uri.scheme =~ /\A\w+\z/ && uri.host.present?
20
+ rescue URI::InvalidURIError
21
+ false
19
22
  end
20
23
  end
@@ -1,3 +1,3 @@
1
1
  module AdSpace
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.8"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ad_space
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - 42up
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-06 00:00:00.000000000 Z
11
+ date: 2024-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails