supplejack_client 1.0.5 → 1.0.7
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 +4 -4
- data/.gitignore +2 -2
- data/.ruby-version +1 -0
- data/.travis.yml +2 -2
- data/Gemfile +4 -2
- data/README.md +3 -3
- data/lib/generators/locales/en.yml +5 -3
- data/lib/generators/supplejack/install_generator.rb +5 -3
- data/lib/generators/templates/supplejack_client.rb +5 -3
- data/lib/supplejack/concept.rb +5 -3
- data/lib/supplejack/config.rb +5 -3
- data/lib/supplejack/controllers/helpers.rb +5 -3
- data/lib/supplejack/engine.rb +5 -3
- data/lib/supplejack/exceptions.rb +8 -3
- data/lib/supplejack/facet.rb +5 -3
- data/lib/supplejack/item.rb +7 -5
- data/lib/supplejack/item_relation.rb +7 -4
- data/lib/supplejack/log_subscriber.rb +5 -3
- data/lib/supplejack/paginated_collection.rb +5 -3
- data/lib/supplejack/record.rb +5 -3
- data/lib/supplejack/request.rb +18 -4
- data/lib/supplejack/search.rb +5 -3
- data/lib/supplejack/story.rb +232 -0
- data/lib/supplejack/story_item.rb +149 -0
- data/lib/supplejack/story_item_relation.rb +81 -0
- data/lib/supplejack/url_formats/item_hash.rb +5 -3
- data/lib/supplejack/user.rb +9 -3
- data/lib/supplejack/user_set.rb +28 -26
- data/lib/supplejack/user_set_relation.rb +5 -3
- data/lib/supplejack/user_story_relation.rb +141 -0
- data/lib/supplejack/util.rb +5 -3
- data/lib/supplejack/version.rb +7 -5
- data/lib/supplejack_client.rb +14 -3
- data/spec/spec_helper.rb +7 -5
- data/spec/supplejack/concept_spec.rb +5 -3
- data/spec/supplejack/facet_spec.rb +5 -3
- data/spec/supplejack/item_relation_spec.rb +5 -3
- data/spec/supplejack/item_spec.rb +7 -5
- data/spec/supplejack/log_subscriber_spec.rb +5 -3
- data/spec/supplejack/paginated_collection_spec.rb +5 -3
- data/spec/supplejack/record_spec.rb +5 -3
- data/spec/supplejack/request_spec.rb +5 -3
- data/spec/supplejack/search_spec.rb +5 -3
- data/spec/supplejack/story_item_relation_spec.rb +149 -0
- data/spec/supplejack/story_item_spec.rb +114 -0
- data/spec/supplejack/story_spec.rb +401 -0
- data/spec/supplejack/user_set_relation_spec.rb +5 -3
- data/spec/supplejack/user_set_spec.rb +9 -7
- data/spec/supplejack/user_spec.rb +5 -3
- data/spec/supplejack/user_story_relation_spec.rb +157 -0
- data/stories_integration_test.rb +97 -0
- data/supplejack_client.gemspec +9 -3
- metadata +32 -10
@@ -0,0 +1,141 @@
|
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
3
|
+
# and is licensed under the GNU General Public License, version 3.
|
4
|
+
# See https://github.com/DigitalNZ/supplejack_client for details.
|
5
|
+
#
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
9
|
+
|
10
|
+
module Supplejack
|
11
|
+
class UserStoryRelation
|
12
|
+
include Supplejack::Request
|
13
|
+
|
14
|
+
attr_reader :user
|
15
|
+
|
16
|
+
def initialize(user)
|
17
|
+
@user = user
|
18
|
+
@stories = []
|
19
|
+
# This is used to determine if we have requested the Stories from the API
|
20
|
+
# Previously @stories defaulted to nil so the ||= operator was used to determine
|
21
|
+
# whether to fetch. This was changed to allow built/created stories to be
|
22
|
+
# automatically included in the relation
|
23
|
+
@initial_fetch = false
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns an array of Story objects and memoizes the array
|
27
|
+
#
|
28
|
+
def fetch(force: false)
|
29
|
+
fetch_stories = -> { fetch_api_stories.map{|s| Supplejack::Story.new(s.merge(user: user.attributes))} }
|
30
|
+
|
31
|
+
@stories = if force
|
32
|
+
fetch_stories.call
|
33
|
+
elsif !@initial_fetch
|
34
|
+
@initial_fetch = true
|
35
|
+
fetch_stories.call
|
36
|
+
else
|
37
|
+
@stories
|
38
|
+
end
|
39
|
+
|
40
|
+
@stories
|
41
|
+
end
|
42
|
+
alias_method :all, :fetch
|
43
|
+
|
44
|
+
# Finds a Story object with the provided ID that belongs to the current
|
45
|
+
# User
|
46
|
+
#
|
47
|
+
# @param [ String ] A 24 character string representing the Story ID
|
48
|
+
#
|
49
|
+
# @return [ Supplejack::Story ] A Story object
|
50
|
+
#
|
51
|
+
def find(story_id)
|
52
|
+
path = "/stories/#{story_id}"
|
53
|
+
build get(path, api_key: API_KEY)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Initializes a new Story object and links it to the current User
|
57
|
+
#
|
58
|
+
# @param [ Hash ] A hash with the Story field names and values
|
59
|
+
#
|
60
|
+
# @return [ Supplejack::Story] A new Story object
|
61
|
+
#
|
62
|
+
def build(attributes={})
|
63
|
+
story = Supplejack::Story.new(attributes)
|
64
|
+
story.api_key = user.api_key
|
65
|
+
|
66
|
+
# Possible at some point in the future we'll want
|
67
|
+
# to change this to something more robust.
|
68
|
+
#
|
69
|
+
# Just not sure if unsaved Stories being in this
|
70
|
+
# will ever be a problem or not
|
71
|
+
@stories << story
|
72
|
+
|
73
|
+
story
|
74
|
+
end
|
75
|
+
|
76
|
+
# Build and persist a Story object with the provided attributes
|
77
|
+
#
|
78
|
+
# @param [ Hash ] A hash with the Story field names and values
|
79
|
+
#
|
80
|
+
# @return [ Supplejack::Story ] A persisted Story object
|
81
|
+
#
|
82
|
+
def create(attributes={})
|
83
|
+
story = build(attributes)
|
84
|
+
story.save
|
85
|
+
|
86
|
+
story
|
87
|
+
end
|
88
|
+
|
89
|
+
# Return an array of Story objects ordered in ascending order
|
90
|
+
# by the specified attribute.
|
91
|
+
#
|
92
|
+
# @param [ Symbol ] A symbol with the attribute to order the Story objects on
|
93
|
+
#
|
94
|
+
# @return [ Array ] A array of Supplejack::Story objects.
|
95
|
+
#
|
96
|
+
def order(attribute)
|
97
|
+
@stories = all.sort_by do |story|
|
98
|
+
value = story.send(attribute)
|
99
|
+
value = value.downcase if value.is_a?(String)
|
100
|
+
|
101
|
+
value
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def to_json(include_contents: true)
|
106
|
+
all.map{|story| story.as_json(include_contents: include_contents)}.to_json
|
107
|
+
end
|
108
|
+
|
109
|
+
# Any method missing on this class is delegated to the Stories objects array
|
110
|
+
# so that the developer can easily execute any Array method on the UserSttoryRelation
|
111
|
+
#
|
112
|
+
# @example
|
113
|
+
# user.stories.each .... => Iterate through the Story objects array
|
114
|
+
# user.stories.size => Get the size of the Story objects array
|
115
|
+
#
|
116
|
+
def method_missing(method, *args, &block)
|
117
|
+
all.send(method, *args, &block)
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
def fetch_api_stories
|
123
|
+
params = {}
|
124
|
+
|
125
|
+
if user.use_own_api_key?
|
126
|
+
path = "/stories"
|
127
|
+
params[:api_key] = user.api_key
|
128
|
+
else
|
129
|
+
path = "/users/#{user.api_key}/stories"
|
130
|
+
end
|
131
|
+
|
132
|
+
if Supplejack.enable_caching
|
133
|
+
Rails.cache.fetch(path, expires_in: 1.day) do
|
134
|
+
get(path, params)
|
135
|
+
end
|
136
|
+
else
|
137
|
+
get(path, params)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
data/lib/supplejack/util.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
module Supplejack
|
9
11
|
module Util
|
data/lib/supplejack/version.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
module Supplejack
|
9
|
-
VERSION = '1.0.
|
10
|
-
end
|
11
|
+
VERSION = '1.0.7'
|
12
|
+
end
|
data/lib/supplejack_client.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
9
|
+
|
10
|
+
begin
|
11
|
+
require 'pry'
|
12
|
+
rescue LoadError
|
13
|
+
end
|
7
14
|
|
8
15
|
require 'supplejack/config'
|
9
16
|
require 'supplejack/version'
|
@@ -23,8 +30,12 @@ module Supplejack
|
|
23
30
|
require 'supplejack/util'
|
24
31
|
require 'supplejack/facet'
|
25
32
|
require 'supplejack/user_set'
|
33
|
+
require 'supplejack/story'
|
34
|
+
require 'supplejack/story_item'
|
35
|
+
require 'supplejack/story_item_relation'
|
26
36
|
require 'supplejack/item_relation'
|
27
37
|
require 'supplejack/item'
|
28
38
|
require 'supplejack/user'
|
29
39
|
require 'supplejack/user_set_relation'
|
40
|
+
require 'supplejack/user_story_relation'
|
30
41
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'rubygems'
|
9
11
|
require 'bundler/setup'
|
@@ -14,8 +16,8 @@ Bundler.require(:default)
|
|
14
16
|
require 'supplejack_client'
|
15
17
|
require 'active_support/all'
|
16
18
|
|
17
|
-
require
|
18
|
-
|
19
|
+
require 'simplecov'
|
20
|
+
SimpleCov.start
|
19
21
|
|
20
22
|
#SimpleCov.start
|
21
23
|
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -65,7 +67,7 @@ module Supplejack
|
|
65
67
|
|
66
68
|
it 'stores the error when a error is raised' do
|
67
69
|
item.save
|
68
|
-
item.errors.should eq 'Forbidden
|
70
|
+
item.errors.should eq 'Forbidden'
|
69
71
|
end
|
70
72
|
end
|
71
73
|
end
|
@@ -89,7 +91,7 @@ module Supplejack
|
|
89
91
|
|
90
92
|
it 'stores the error when a error is raised' do
|
91
93
|
item.destroy
|
92
|
-
item.errors.should eq 'Forbidden
|
94
|
+
item.errors.should eq 'Forbidden'
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# The Supplejack
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
2
3
|
# and is licensed under the GNU General Public License, version 3.
|
3
4
|
# See https://github.com/DigitalNZ/supplejack_client for details.
|
4
5
|
#
|
5
|
-
# Supplejack was created by DigitalNZ at the
|
6
|
-
# and the Department of Internal Affairs.
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
7
9
|
|
8
10
|
require 'spec_helper'
|
9
11
|
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# The Supplejack Common code is
|
2
|
+
# Crown copyright (C) 2014, New Zealand Government,
|
3
|
+
# and is licensed under the GNU General Public License, version 3.
|
4
|
+
# See https://github.com/DigitalNZ/supplejack_client for details.
|
5
|
+
#
|
6
|
+
# Supplejack was created by DigitalNZ at the
|
7
|
+
# National Library of NZ and the Department of Internal Affairs.
|
8
|
+
# http://digitalnz.org/supplejack
|
9
|
+
|
10
|
+
require 'spec_helper'
|
11
|
+
|
12
|
+
module Supplejack
|
13
|
+
describe ItemRelation do
|
14
|
+
let(:supplejack_story) do
|
15
|
+
Supplejack::Story.new(
|
16
|
+
id: '1234567890',
|
17
|
+
user: {api_key: 'foobar'},
|
18
|
+
name: 'test',
|
19
|
+
contents: [
|
20
|
+
{id: 1, type: 'embed', sub_type: 'dnz', position: 1},
|
21
|
+
{id: 2, type: 'embed', sub_type: 'dnz', position: 2}
|
22
|
+
]
|
23
|
+
)
|
24
|
+
end
|
25
|
+
let(:relation) { Supplejack::StoryItemRelation.new(supplejack_story) }
|
26
|
+
|
27
|
+
describe '#initialize' do
|
28
|
+
it 'assigns the story object as @story' do
|
29
|
+
expect(relation.story).to eq(supplejack_story)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'initializes an array of Supplejack::Items' do
|
33
|
+
expect(relation.all).to be_an Array
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'returns an empty array of items when the user_set attributes records are nil' do
|
37
|
+
expect(supplejack_story).to receive(:attributes).and_return(nil)
|
38
|
+
|
39
|
+
expect(relation.all).to be_empty
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'adds the story_id to the Supplejack::StoryItem object' do
|
43
|
+
expect(relation.all.first.story_id).to eq('1234567890')
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'adds the api_key in the Story to the Supplejack::StoryItem' do
|
47
|
+
expect(relation.all.first.api_key).to eq('foobar')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#all' do
|
52
|
+
it 'returns the array of @items' do
|
53
|
+
expect(supplejack_story.items.all).to be_an Array
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#find' do
|
58
|
+
it 'returns finds the item by record_id' do
|
59
|
+
item = relation.find(1)
|
60
|
+
expect(item).to be_a Supplejack::StoryItem
|
61
|
+
expect(item.id).to eq(1)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'finds the item by a string record_id' do
|
65
|
+
item = relation.find('1')
|
66
|
+
|
67
|
+
expect(item).to be_a Supplejack::StoryItem
|
68
|
+
expect(item.id).to eq(1)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '#build' do
|
73
|
+
it 'initializes a new item object with the user_set_id' do
|
74
|
+
item = relation.build
|
75
|
+
|
76
|
+
expect(item.story_id).to eq('1234567890')
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'accepts a hash of attributes' do
|
80
|
+
item = relation.build(type: 'embed', sub_type: 'dnz')
|
81
|
+
|
82
|
+
expect(item.type).to eq('embed')
|
83
|
+
expect(item.sub_type).to eq('dnz')
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'adds the Story api_key' do
|
87
|
+
item = relation.build
|
88
|
+
|
89
|
+
expect(item.api_key).to eq('foobar')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe '#create' do
|
94
|
+
let(:item) { double(:item).as_null_object }
|
95
|
+
|
96
|
+
it 'builds and saves the item' do
|
97
|
+
expect(relation).to receive(:build) { item }
|
98
|
+
expect(item).to receive(:save)
|
99
|
+
|
100
|
+
relation.create
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'passes the parameters along to the build method' do
|
104
|
+
expect(relation).to receive(:build).with(type: 'embed') { item }
|
105
|
+
|
106
|
+
relation.create(type: 'embed')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe '#move_item' do
|
111
|
+
let(:item) { relation.all.first }
|
112
|
+
|
113
|
+
before do
|
114
|
+
expect(relation).to receive(:post).with(
|
115
|
+
"/stories/#{supplejack_story.id}/items/#{item.id}/moves",
|
116
|
+
{api_key: 'foobar'},
|
117
|
+
{item_id: 1, position: 2}
|
118
|
+
).and_return([
|
119
|
+
{id: 2, type: 'embed', sub_type: 'dnz', position: 1},
|
120
|
+
{id: 1, type: 'embed', sub_type: 'dnz', position: 2}
|
121
|
+
])
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'calls the api move item endpoint with the new position' do
|
125
|
+
relation.move_item(item.id, 2)
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'updates the items with the response' do
|
129
|
+
relation.move_item(item.id, 2)
|
130
|
+
|
131
|
+
expect(relation.all.first.id).to eq(2)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'items array behaviour' do
|
136
|
+
it 'executes array methods on the @items array' do
|
137
|
+
expect(relation.any?{|x| x.id == 1}).to eq(true)
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'should be able to iterate through the items relation' do
|
141
|
+
relation.each do |item|
|
142
|
+
expect(item).to be_a Supplejack::StoryItem
|
143
|
+
end
|
144
|
+
|
145
|
+
expect(relation.size).to eq(2)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|