supplejack_client 1.0.5 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 607c91386fe82d2b35fc9e1afdaa111f931c5689
|
4
|
+
data.tar.gz: 9ed5ba9435d54de0192afd8760f2e60f30b57e54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 138a2ed70f1791ebf0759347558a21b0f008c890ee4f417c2c62968e055521be90fc58f1121bef8cd3399a606e6d3971d79d6e406611a1d35d8a9ef467c8e9ee
|
7
|
+
data.tar.gz: 86b874fbfeb3fcf178ec8c3d345405ba970d028dd028d193a913218ccc017d746814e3578500cada6140274229176d721ecb28e0d449049614fd62f55dbba2ee
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.1
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Supplejack Client
|
1
|
+
# Supplejack Client [![Gem Version](https://badge.fury.io/rb/supplejack_client.svg)](https://badge.fury.io/rb/supplejack_client)
|
2
2
|
|
3
3
|
The Supplejack Client is a library to abstract the interaction with the Supplejack API. It connects to the Supplejack API, and allows you to treat models as if they were in a local database.
|
4
4
|
|
@@ -9,7 +9,7 @@ For more information on how to configure and use this application refer to the [
|
|
9
9
|
Add it to your Gemfile:
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
gem 'supplejack_client',
|
12
|
+
gem 'supplejack_client', git: 'git@github.com:DigitalNZ/supplejack_client.git'
|
13
13
|
```
|
14
14
|
|
15
15
|
Run bundle install:
|
@@ -150,4 +150,4 @@ This program is free software: you can redistribute it and/or modify it under th
|
|
150
150
|
|
151
151
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
152
152
|
|
153
|
-
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses / http://www.gnu.org/licenses/gpl-3.0.txt
|
153
|
+
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses / http://www.gnu.org/licenses/gpl-3.0.txt
|
@@ -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
|
en:
|
9
11
|
supplejack_client:
|
@@ -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 Generators
|
@@ -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
|
Supplejack.configure do |config|
|
9
11
|
|
data/lib/supplejack/concept.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 'supplejack/search'
|
9
11
|
|
data/lib/supplejack/config.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 Config
|
@@ -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 'rails_autolink'
|
9
11
|
|
data/lib/supplejack/engine.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 'supplejack_client'
|
9
11
|
require 'rails'
|
@@ -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
|
class RecordNotFound < StandardError
|
@@ -15,6 +17,9 @@ module Supplejack
|
|
15
17
|
class SetNotFound < StandardError
|
16
18
|
end
|
17
19
|
|
20
|
+
class StoryNotFound < StandardError
|
21
|
+
end
|
22
|
+
|
18
23
|
class MalformedRequest < StandardError
|
19
24
|
end
|
20
25
|
end
|
data/lib/supplejack/facet.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
|
class Facet
|
data/lib/supplejack/item.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
|
|
@@ -62,7 +64,7 @@ module Supplejack
|
|
62
64
|
Rails.cache.delete("/users/#{self.api_key}/sets") if Supplejack.enable_caching
|
63
65
|
return true
|
64
66
|
rescue StandardError => e
|
65
|
-
self.errors = e.
|
67
|
+
self.errors = e.message
|
66
68
|
return false
|
67
69
|
end
|
68
70
|
end
|
@@ -77,7 +79,7 @@ module Supplejack
|
|
77
79
|
Rails.cache.delete("/users/#{self.api_key}/sets") if Supplejack.enable_caching
|
78
80
|
return true
|
79
81
|
rescue StandardError => e
|
80
|
-
self.errors = e.
|
82
|
+
self.errors = e.message
|
81
83
|
return false
|
82
84
|
end
|
83
85
|
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
|
module Supplejack
|
9
11
|
|
@@ -58,6 +60,7 @@ module Supplejack
|
|
58
60
|
#
|
59
61
|
def create(attributes={})
|
60
62
|
item = self.build(attributes)
|
63
|
+
|
61
64
|
item.save
|
62
65
|
end
|
63
66
|
|
@@ -67,7 +70,7 @@ module Supplejack
|
|
67
70
|
# @example
|
68
71
|
# user_set.items.each .... => Iterate through the Item objects array
|
69
72
|
# user_set.items.size => Get the size of the Item objects array
|
70
|
-
#
|
73
|
+
#
|
71
74
|
def method_missing(method, *args, &block)
|
72
75
|
@items.send(method, *args, &block)
|
73
76
|
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
|
module Supplejack
|
9
11
|
class LogSubscriber < ActiveSupport::LogSubscriber
|
@@ -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
|
class PaginatedCollection
|
data/lib/supplejack/record.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 'supplejack/search'
|
9
11
|
|
data/lib/supplejack/request.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 'rest-client'
|
9
11
|
|
@@ -27,7 +29,7 @@ module Supplejack
|
|
27
29
|
raise e
|
28
30
|
ensure
|
29
31
|
duration = (Time.now - started)*1000 # Convert to miliseconds
|
30
|
-
solr_request_params = result["search"]['solr_request_params'] if result && result['search']
|
32
|
+
solr_request_params = result["search"]['solr_request_params'] if result && result.is_a?(Hash) && result['search']
|
31
33
|
@subscriber = Supplejack::LogSubscriber.new
|
32
34
|
@subscriber.log_request(duration, payload, solr_request_params)
|
33
35
|
end
|
@@ -66,6 +68,18 @@ module Supplejack
|
|
66
68
|
end
|
67
69
|
end
|
68
70
|
|
71
|
+
def patch(path, params: {}, payload: {}, options: {})
|
72
|
+
payload ||= {}
|
73
|
+
log_request(:patch, path, params, payload) do
|
74
|
+
response = RestClient::Request.execute(:url => full_url(path, nil, params),
|
75
|
+
:method => :patch,
|
76
|
+
:payload => payload.to_json,
|
77
|
+
:timeout => timeout(options),
|
78
|
+
:headers => {:content_type => :json, :accept => :json})
|
79
|
+
JSON.parse(response) rescue {}.to_json
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
69
83
|
private
|
70
84
|
|
71
85
|
def full_url(path, format=nil, params={})
|
data/lib/supplejack/search.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 'supplejack/request'
|
9
11
|
require 'digest/md5'
|
@@ -0,0 +1,232 @@
|
|
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
|
+
|
12
|
+
class Story
|
13
|
+
extend Supplejack::Request
|
14
|
+
extend ActiveModel::Naming
|
15
|
+
include ActiveModel::Conversion
|
16
|
+
|
17
|
+
MODIFIABLE_ATTRIBUTES = [:name, :description, :privacy, :copyright, :featured, :approved, :tags, :record_ids].freeze
|
18
|
+
UNMODIFIABLE_ATTRIBUTES = [:id, :created_at, :updated_at, :number_of_items, :contents, :cover_thumbnail].freeze
|
19
|
+
ATTRIBUTES = (MODIFIABLE_ATTRIBUTES + UNMODIFIABLE_ATTRIBUTES).freeze
|
20
|
+
|
21
|
+
attr_accessor *ATTRIBUTES
|
22
|
+
attr_accessor :user, :errors, :api_key
|
23
|
+
|
24
|
+
# Define setter methods for both created_at and updated_at so that
|
25
|
+
# they always return a Time object.
|
26
|
+
#
|
27
|
+
[:created_at, :updated_at].each do |attribute|
|
28
|
+
define_method("#{attribute}=") do |time|
|
29
|
+
self.instance_variable_set("@#{attribute}", Util.time(time))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(attributes={})
|
34
|
+
@attributes = attributes.try(:symbolize_keys) || {}
|
35
|
+
@user = Supplejack::User.new(@attributes[:user])
|
36
|
+
self.attributes = @attributes
|
37
|
+
end
|
38
|
+
|
39
|
+
def items
|
40
|
+
@items ||= StoryItemRelation.new(self)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns if the Story is persisted to the API or not.
|
44
|
+
#
|
45
|
+
# @return [ true, false ] True if the UserSet is persisted to the API, false if not.
|
46
|
+
#
|
47
|
+
def new_record?
|
48
|
+
self.id.blank?
|
49
|
+
end
|
50
|
+
|
51
|
+
def attributes
|
52
|
+
retrieve_attributes(ATTRIBUTES)
|
53
|
+
end
|
54
|
+
|
55
|
+
def api_attributes
|
56
|
+
retrieve_attributes(MODIFIABLE_ATTRIBUTES)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Executes a POST request when the Story hasn't been persisted to the API, otherwise it executes
|
60
|
+
# a PATCH request.
|
61
|
+
#
|
62
|
+
# When the API returns a error response, the errors are available through the Story#errors
|
63
|
+
# virtual attribute.
|
64
|
+
#
|
65
|
+
# @return [ true, false ] True if the API response was successful, false if not.
|
66
|
+
#
|
67
|
+
def save
|
68
|
+
begin
|
69
|
+
if self.new_record?
|
70
|
+
self.attributes = self.class.post("/stories", {api_key: self.api_key}, {story: self.api_attributes})
|
71
|
+
else
|
72
|
+
self.attributes = self.class.patch("/stories/#{self.id}", payload: {story: self.api_attributes})
|
73
|
+
end
|
74
|
+
|
75
|
+
Rails.cache.delete("/users/#{self.api_key}/stories") if Supplejack.enable_caching
|
76
|
+
|
77
|
+
true
|
78
|
+
rescue StandardError => e
|
79
|
+
self.errors = e.message
|
80
|
+
|
81
|
+
false
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Executes a DELETE request to the API with the Story ID and the user's api_key
|
86
|
+
#
|
87
|
+
# When the API returns a error response, the errors are available through the Story#errors
|
88
|
+
# virtual attribute.
|
89
|
+
#
|
90
|
+
# @return [ true, false ] True if the API response was successful, false if not.
|
91
|
+
#
|
92
|
+
def destroy
|
93
|
+
return false if self.new_record?
|
94
|
+
|
95
|
+
begin
|
96
|
+
self.class.delete("/stories/#{self.id}")
|
97
|
+
|
98
|
+
Rails.cache.delete("/users/#{self.api_key}/stories") if Supplejack.enable_caching
|
99
|
+
|
100
|
+
true
|
101
|
+
rescue StandardError => e
|
102
|
+
self.errors = e.message
|
103
|
+
|
104
|
+
false
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Fetches the Story information from the API again, in case it had changed.
|
109
|
+
#
|
110
|
+
# This can be useful if they items for a Story changed and you want the relation
|
111
|
+
# to have the most up to date items.
|
112
|
+
#
|
113
|
+
def reload
|
114
|
+
begin
|
115
|
+
self.attributes = self.class.get("/stories/#{self.id}")
|
116
|
+
@items = nil
|
117
|
+
rescue RestClient::ResourceNotFound
|
118
|
+
raise Supplejack::StoryNotFound, "Story with ID #{id} was not found"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# Executes a GET request with the provided Story ID and initializes
|
123
|
+
# a Story object with the response from the API.
|
124
|
+
#
|
125
|
+
# @return [ Story ] A Story object
|
126
|
+
#
|
127
|
+
def self.find(id, api_key: nil, params: {})
|
128
|
+
begin
|
129
|
+
response = get("/stories/#{id}", params)
|
130
|
+
attributes = response || {}
|
131
|
+
|
132
|
+
story = new(attributes)
|
133
|
+
story.api_key = api_key if api_key.present?
|
134
|
+
|
135
|
+
story
|
136
|
+
rescue RestClient::ResourceNotFound
|
137
|
+
raise Supplejack::StoryNotFound, "Story with ID #{id} was not found"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# Assigns the provided attributes to the Story object
|
142
|
+
#
|
143
|
+
def attributes=(attributes)
|
144
|
+
attributes = attributes.try(:symbolize_keys) || {}
|
145
|
+
attributes.each do |attr, value|
|
146
|
+
self.send("#{attr}=", value) if ATTRIBUTES.include?(attr)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# Updates the Story attributes and persists it to the API
|
151
|
+
#
|
152
|
+
# @return [ true, false ] True if the API response was successful, false if not.
|
153
|
+
#
|
154
|
+
def update_attributes(attributes={})
|
155
|
+
self.attributes = attributes
|
156
|
+
|
157
|
+
self.save
|
158
|
+
end
|
159
|
+
|
160
|
+
# Returns the ApiKey of the User this Story belongs to
|
161
|
+
# If the api_key is set on the Story directly it uses that one instead
|
162
|
+
#
|
163
|
+
# @return [String] User ApiKey
|
164
|
+
def api_key
|
165
|
+
@api_key || @user.api_key
|
166
|
+
end
|
167
|
+
|
168
|
+
# Returns a comma separated list of tags for this Story
|
169
|
+
#
|
170
|
+
def tag_list
|
171
|
+
self.tags.join(', ') if self.tags
|
172
|
+
end
|
173
|
+
|
174
|
+
def private?
|
175
|
+
self.privacy == "private"
|
176
|
+
end
|
177
|
+
|
178
|
+
def public?
|
179
|
+
self.privacy == "public"
|
180
|
+
end
|
181
|
+
|
182
|
+
def hidden?
|
183
|
+
self.privacy == "hidden"
|
184
|
+
end
|
185
|
+
|
186
|
+
# A Story is viewable by anyone if it's public or hidden
|
187
|
+
# When the Story is private it's only viewable by the owner.
|
188
|
+
#
|
189
|
+
# @param [ Supplejack::User ] User to check if they can see it
|
190
|
+
#
|
191
|
+
# @return [ true, false ] True if the user can view the current Story, false if not.
|
192
|
+
#
|
193
|
+
def viewable_by?(user)
|
194
|
+
return true if self.public? || self.hidden?
|
195
|
+
|
196
|
+
self.owned_by?(user)
|
197
|
+
end
|
198
|
+
|
199
|
+
# Compares the api_key of the user and the api_key assigned to the Story
|
200
|
+
# to find out if the user passed is the owner of the story.
|
201
|
+
#
|
202
|
+
# @param [ Supplejack::User ] User to check if they own it
|
203
|
+
#
|
204
|
+
# @return [ true, false ] True if the user owns the current Story, false if not.
|
205
|
+
#
|
206
|
+
def owned_by?(user)
|
207
|
+
return false if user.try(:api_key).blank? || self.api_key.blank?
|
208
|
+
|
209
|
+
user.try(:api_key) == self.api_key
|
210
|
+
end
|
211
|
+
|
212
|
+
def as_json(include_contents: true)
|
213
|
+
include_contents ? attributes : attributes.except(:contents)
|
214
|
+
end
|
215
|
+
|
216
|
+
def to_json(include_contents: true)
|
217
|
+
as_json(include_contents: include_contents).to_json
|
218
|
+
end
|
219
|
+
|
220
|
+
private
|
221
|
+
|
222
|
+
def retrieve_attributes(attributes_list)
|
223
|
+
{}.tap do |attributes|
|
224
|
+
attributes_list.each do |attribute|
|
225
|
+
value = self.send(attribute)
|
226
|
+
attributes[attribute] = value
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
end
|