prismic.io 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16a00d0902a7e578bae02a8f3ba454601d4a11eb
4
- data.tar.gz: c4c7c7328802c53c8a4b756be7696a313926675c
3
+ metadata.gz: f1a922f0e6ee8a7f0deabb7e1c6e9d301634b82c
4
+ data.tar.gz: aeba97f56cd7799118b38779eb244fd544157b66
5
5
  SHA512:
6
- metadata.gz: 01275c85a8294298cc99f43bbbaf9dd63e537d6ae73e3c446cb6d8e7fc9797a65509c329eb4f8e75d535010f8035c0dfec1ed4c39dde4f777dc08a3ab661cbe8
7
- data.tar.gz: 79c636388540a1cd684691373f42d978fb7a8b7994219b4b05086fa9d850b99c747ef8866f4974e11c85400782959a572c4e6e8baddf9ad9b3a1f28b34772358
6
+ metadata.gz: c36746c2c5c6dd0238e04c1b42fc933853a60785bb64c6019c30eaa81f0a283e4b4f652163db79f810c46cc5f35a84e410f7e437fc6dd5fab6ca6a69276278d8
7
+ data.tar.gz: 5c16360d81add7976f534ba3a5fa479bb503be2eb49e346e90bc72160291b8d485984ac53a77a348678bdb007faea611e2de69905b6023fc9f8508469ad7b249
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prismic.io (1.0.3)
4
+ prismic.io (1.0.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/lib/prismic.rb CHANGED
@@ -678,6 +678,7 @@ require 'prismic/api'
678
678
  require 'prismic/form'
679
679
  require 'prismic/fragments'
680
680
  require 'prismic/predicates'
681
+ require 'prismic/experiments'
681
682
  require 'prismic/json_parsers'
682
683
  require 'prismic/cache/lru'
683
684
  require 'prismic/cache/basic'
data/lib/prismic/api.rb CHANGED
@@ -7,7 +7,7 @@ module Prismic
7
7
  @@warned_oauth_initiate_url = false
8
8
  @@warned_oauth_check_token = false
9
9
  attr_reader :json, :access_token, :http_client
10
- attr_accessor :refs, :bookmarks, :forms, :tags, :types, :oauth, :cache
10
+ attr_accessor :refs, :bookmarks, :forms, :tags, :types, :experiments, :oauth, :cache
11
11
 
12
12
  # Is the cache enabled on this API object?
13
13
  #
@@ -150,6 +150,7 @@ module Prismic
150
150
  api.tags = data['tags']
151
151
  api.types = data['types']
152
152
  api.oauth = OAuth.new(data['oauth_initiate'], data['oauth_token'], http_client)
153
+ api.experiments = Experiments.parse(data['experiments'])
153
154
  }
154
155
  end
155
156
 
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+ module Prismic
3
+
4
+ class Experiments
5
+ attr_reader :draft, :running
6
+
7
+ def initialize(draft, running)
8
+ @draft = draft
9
+ @running = running
10
+ end
11
+
12
+ def current
13
+ running.first
14
+ end
15
+
16
+ def ref_from_cookie(cookie)
17
+ if cookie == nil
18
+ return nil
19
+ end
20
+ splitted = cookie.strip.split('%20')
21
+ if splitted.size >= 2
22
+ experiment = running.find { |exp| exp.google_id == splitted[0] }
23
+ if experiment == nil
24
+ return nil
25
+ end
26
+ var_index = splitted[1].to_i
27
+ if var_index > -1 && var_index < experiment.variations.size
28
+ return experiment.variations[var_index].ref
29
+ end
30
+ end
31
+ nil
32
+ end
33
+
34
+ def self.parse(data)
35
+ draft = []
36
+ running = []
37
+ if data != nil
38
+ draft = data['draft'].map { |exp|
39
+ Experiment.parse(exp)
40
+ }
41
+ running = data['running'].map { |exp|
42
+ Experiment.parse(exp)
43
+ }
44
+ end
45
+ new(draft, running)
46
+ end
47
+
48
+ end
49
+
50
+ class Experiment
51
+ attr_reader :id, :google_id, :name, :variations
52
+
53
+ def initialize(id, google_id, name, variations)
54
+ @id = id
55
+ @google_id = google_id
56
+ @name = name
57
+ @variations = variations
58
+ end
59
+
60
+ def self.parse(data)
61
+ new(data['id'], data['googleId'], data['name'], data['variations'].map { |variation|
62
+ Variation.parse(variation)
63
+ })
64
+ end
65
+ end
66
+
67
+ class Variation
68
+ attr_reader :id, :ref, :label
69
+
70
+ def initialize(id, ref, label)
71
+ @id = id
72
+ @ref = ref
73
+ @label = label
74
+ end
75
+
76
+ def self.parse(data)
77
+ new(data['id'], data['ref'], data['label'])
78
+ end
79
+
80
+ end
81
+
82
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module Prismic
3
3
 
4
- VERSION = '1.0.3'
4
+ VERSION = '1.0.4'
5
5
 
6
6
  end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe "Experiments'" do
5
+
6
+ before do
7
+ @raw_json_experiments = File.read("#{File.dirname(__FILE__)}/responses_mocks/experiments.json")
8
+ @json_experiments = JSON.load(@raw_json_experiments)
9
+ @experiments = Prismic::Experiments.parse(@json_experiments)
10
+ end
11
+
12
+ it 'response is properly parsed' do
13
+ first = @experiments.running[0]
14
+ first.id.should == 'VDUBBawGAKoGelsX'
15
+ first.google_id.should == '_UQtin7EQAOH5M34RQq6Dg'
16
+ first.name.should == 'Exp 1'
17
+
18
+ base = first.variations[0]
19
+ base.id.should == 'VDUBBawGAKoGelsZ'
20
+ base.label.should == 'Base'
21
+ base.ref.should == 'VDUBBawGALAGelsa'
22
+ end
23
+
24
+ describe 'cookies' do
25
+ it 'is empty' do
26
+ @experiments.ref_from_cookie('').should be_nil
27
+ end
28
+
29
+ it 'invalid content' do
30
+ @experiments.ref_from_cookie('Ponyes are awesome').should be_nil
31
+ end
32
+
33
+ it 'actual running variation index' do
34
+ @experiments.ref_from_cookie('_UQtin7EQAOH5M34RQq6Dg%200').should == 'VDUBBawGALAGelsa'
35
+ @experiments.ref_from_cookie('_UQtin7EQAOH5M34RQq6Dg%201').should == 'VDUUmHIKAZQKk9uq'
36
+ end
37
+
38
+ it 'index overflow' do
39
+ @experiments.ref_from_cookie('_UQtin7EQAOH5M34RQq6Dg%209').should be_nil
40
+ @experiments.ref_from_cookie('_UQtin7EQAOH5M34RQq6Dg%20-1').should be_nil
41
+ end
42
+
43
+ it 'unknown Google ID' do
44
+ @experiments.ref_from_cookie('NotAGoodLookingId%200').should be_nil
45
+ @experiments.ref_from_cookie('NotAGoodLookingId%201').should be_nil
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+
52
+
@@ -0,0 +1,39 @@
1
+ {
2
+ "draft": [
3
+ {
4
+ "id": "xxxxxxxxxxoGelsX",
5
+ "name": "Exp 2",
6
+ "variations": [
7
+ {
8
+ "id": "VDUBBawGAKoGelsZ",
9
+ "label": "Base",
10
+ "ref": "VDUBBawGALAGelsa"
11
+ },
12
+ {
13
+ "id": "VDUE-awGALAGemME",
14
+ "label": "var 1",
15
+ "ref": "VDUUmHIKAZQKk9uq"
16
+ }
17
+ ]
18
+ }
19
+ ],
20
+ "running": [
21
+ {
22
+ "googleId": "_UQtin7EQAOH5M34RQq6Dg",
23
+ "id": "VDUBBawGAKoGelsX",
24
+ "name": "Exp 1",
25
+ "variations": [
26
+ {
27
+ "id": "VDUBBawGAKoGelsZ",
28
+ "label": "Base",
29
+ "ref": "VDUBBawGALAGelsa"
30
+ },
31
+ {
32
+ "id": "VDUE-awGALAGemME",
33
+ "label": "var 1",
34
+ "ref": "VDUUmHIKAZQKk9uq"
35
+ }
36
+ ]
37
+ }
38
+ ]
39
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prismic.io
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Étienne Vallette d'Osia
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-10-24 00:00:00.000000000 Z
14
+ date: 2014-10-28 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -89,6 +89,7 @@ files:
89
89
  - lib/prismic/api.rb
90
90
  - lib/prismic/cache/basic.rb
91
91
  - lib/prismic/cache/lru.rb
92
+ - lib/prismic/experiments.rb
92
93
  - lib/prismic/form.rb
93
94
  - lib/prismic/fragments.rb
94
95
  - lib/prismic/fragments/color.rb
@@ -112,6 +113,7 @@ files:
112
113
  - prismic.gemspec
113
114
  - spec/cache_spec.rb
114
115
  - spec/doc_spec.rb
116
+ - spec/experiments_spec.rb
115
117
  - spec/fragments_spec.rb
116
118
  - spec/json_parsers_spec.rb
117
119
  - spec/lesbonneschoses_spec.rb
@@ -122,6 +124,7 @@ files:
122
124
  - spec/responses_mocks/api.json
123
125
  - spec/responses_mocks/document.json
124
126
  - spec/responses_mocks/document_with_unknown_fragment.json
127
+ - spec/responses_mocks/experiments.json
125
128
  - spec/responses_mocks/fragments.json
126
129
  - spec/responses_mocks/structured_text_heading.json
127
130
  - spec/responses_mocks/structured_text_linkfile.json
@@ -156,6 +159,7 @@ summary: Prismic.io development kit
156
159
  test_files:
157
160
  - spec/cache_spec.rb
158
161
  - spec/doc_spec.rb
162
+ - spec/experiments_spec.rb
159
163
  - spec/fragments_spec.rb
160
164
  - spec/json_parsers_spec.rb
161
165
  - spec/lesbonneschoses_spec.rb
@@ -166,6 +170,7 @@ test_files:
166
170
  - spec/responses_mocks/api.json
167
171
  - spec/responses_mocks/document.json
168
172
  - spec/responses_mocks/document_with_unknown_fragment.json
173
+ - spec/responses_mocks/experiments.json
169
174
  - spec/responses_mocks/fragments.json
170
175
  - spec/responses_mocks/structured_text_heading.json
171
176
  - spec/responses_mocks/structured_text_linkfile.json