genius 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: 99591718ba879a8d777a77d36774ba38902a5fc2
4
- data.tar.gz: 611a7e528d428f6ff2d539f5163a9f7481aa7d11
3
+ metadata.gz: c727308708c8f45cbb85934762b28cdb8f3c6c5a
4
+ data.tar.gz: b9b7651fd5ddd04fd300a57a825d9c03eeaad0c9
5
5
  SHA512:
6
- metadata.gz: bb7182b7640f26ed6b7cde30fd3004968ce89ee4374b1355c5ca6aadfb5cca3f94f7e620928bb1885ee006b4978263087f84d0cbb8c8d46f9dd72170c9f1485a
7
- data.tar.gz: 71f6e64bd982c826384c99a07ad5dbff0263ae3052ed8d145532001363baf99d5fc0f0531e44a15bbef9bd72f185aec5dfa2b4f5e0d8a3fcdcb836d6ddccd6e7
6
+ metadata.gz: b4669440fe4adf3bd25692f09063bbff7b7ca62b9308d86c1578a503a68ccb38a50b9c4ff4510099abdfedd0cbe91beb51d073212a83a4c81d1b9ab675c47f8d
7
+ data.tar.gz: e372cebf483d5d86f033a611a8f3446c293441c8fbf17b0710e6d38f6bbb29f0e57195176ba8ca662019d88283bf907bf7d7a42cf450fd66b8fc684fb7c9ecbe
@@ -0,0 +1,56 @@
1
+ # For all options see https://github.com/bbatsov/rubocop/tree/master/config
2
+
3
+ inherit_from: .rubocop_todo.yml
4
+
5
+ AllCops:
6
+ RunRailsCops: false
7
+ Include:
8
+ - Rakefile
9
+ Exclude:
10
+ - .*/**/*
11
+
12
+ # Limit lines to 80 characters.
13
+ LineLength:
14
+ Max: 90
15
+
16
+ ClassLength:
17
+ Enabled: false
18
+
19
+ ModuleLength:
20
+ Enabled: false
21
+
22
+ # Avoid methods longer than 30 lines of code
23
+ MethodLength:
24
+ CountComments: false # count full line comments?
25
+ Max: 87
26
+
27
+ # Avoid single-line methods.
28
+ SingleLineMethods:
29
+ AllowIfMethodIsEmpty: true
30
+
31
+ StringLiterals:
32
+ Enabled: false
33
+
34
+ GlobalVars:
35
+ Enabled: false # We use them Redis + StatsD (though maybe we shouldn't?)
36
+
37
+ # Wants underscores in all large numbers. Pain in the ass for things like
38
+ # unix timestamps.
39
+ NumericLiterals:
40
+ Enabled: false
41
+
42
+ # Wants you to use the same argument names for every reduce. This seems kinda
43
+ # naff compared to naming them semantically
44
+ SingleLineBlockParams:
45
+ Enabled: false
46
+
47
+ Style/SignalException:
48
+ EnforcedStyle: 'only_raise'
49
+
50
+ # Use trailing rather than leading dots on multi-line call chains
51
+ Style/DotPosition:
52
+ EnforcedStyle: trailing
53
+
54
+ # Allow non-ASCII characters (e.g. £) in comments
55
+ Style/AsciiComments:
56
+ Enabled: false
@@ -0,0 +1,117 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2015-06-06 22:47:07 +0100 using RuboCop version 0.32.0.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 50
9
+ # Cop supports --auto-correct.
10
+ Lint/UnusedBlockArgument:
11
+ Enabled: false
12
+
13
+ # Offense count: 187
14
+ Metrics/AbcSize:
15
+ Max: 61
16
+
17
+ # Offense count: 26
18
+ Metrics/CyclomaticComplexity:
19
+ Max: 10
20
+
21
+ # Offense count: 11
22
+ Metrics/PerceivedComplexity:
23
+ Max: 10
24
+
25
+ # Offense count: 12
26
+ Style/AccessorMethodName:
27
+ Enabled: false
28
+
29
+ # Offense count: 164
30
+ # Cop supports --auto-correct.
31
+ # Configuration parameters: EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle, SupportedLastArgumentHashStyles.
32
+ Style/AlignHash:
33
+ Enabled: false
34
+
35
+ # Offense count: 3
36
+ # Cop supports --auto-correct.
37
+ # Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods.
38
+ Style/BlockDelimiters:
39
+ Enabled: false
40
+
41
+ # Offense count: 128
42
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
43
+ Style/ClassAndModuleChildren:
44
+ Enabled: false
45
+
46
+ # Offense count: 21
47
+ # Cop supports --auto-correct.
48
+ Style/ClosingParenthesisIndentation:
49
+ Enabled: false
50
+
51
+ # Offense count: 13
52
+ # Cop supports --auto-correct.
53
+ # Configuration parameters: Keywords.
54
+ Style/CommentAnnotation:
55
+ Enabled: false
56
+
57
+ # Offense count: 743
58
+ Style/Documentation:
59
+ Enabled: false
60
+
61
+ # Offense count: 9
62
+ Style/DoubleNegation:
63
+ Enabled: false
64
+
65
+ # Offense count: 109
66
+ # Configuration parameters: MinBodyLength.
67
+ Style/GuardClause:
68
+ Enabled: false
69
+
70
+ # Offense count: 48
71
+ # Cop supports --auto-correct.
72
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
73
+ Style/IndentHash:
74
+ Enabled: false
75
+
76
+ # Offense count: 70
77
+ # Cop supports --auto-correct.
78
+ Style/Lambda:
79
+ Enabled: false
80
+
81
+ # Offense count: 577
82
+ # Cop supports --auto-correct.
83
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
84
+ Style/MultilineOperationIndentation:
85
+ Enabled: false
86
+
87
+ # Offense count: 21
88
+ # Configuration parameters: NamePrefix, NamePrefixBlacklist.
89
+ Style/PredicateName:
90
+ Enabled: false
91
+
92
+ # Offense count: 4
93
+ # Cop supports --auto-correct.
94
+ Style/Proc:
95
+ Enabled: false
96
+
97
+ # Offense count: 173
98
+ # Cop supports --auto-correct.
99
+ Style/RedundantSelf:
100
+ Enabled: false
101
+
102
+ # Offense count: 28
103
+ # Cop supports --auto-correct.
104
+ Style/SingleSpaceBeforeFirstArg:
105
+ Enabled: false
106
+
107
+ # Offense count: 3
108
+ # Cop supports --auto-correct.
109
+ # Configuration parameters: MultiSpaceAllowedForOperators.
110
+ Style/SpaceAroundOperators:
111
+ Enabled: false
112
+
113
+ # Offense count: 5
114
+ # Cop supports --auto-correct.
115
+ # Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
116
+ Style/TrivialAccessors:
117
+ Enabled: false
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.2.0
4
+ - 2.0.0
4
5
  before_install: gem install bundler -v 1.10.4
6
+ script:
7
+ - bundle exec rubocop
@@ -0,0 +1,7 @@
1
+ ## 0.1.1 (3rd July 2015)
2
+
3
+ * Support for new Annotations APIs
4
+
5
+ ## 0.1.0 (26th June 2015)
6
+
7
+ * Initial release
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Genius
2
2
 
3
+ [![Build Status](https://travis-ci.org/timrogers/genius.svg)](https://travis-ci.org/timrogers/genius)
4
+ [![Gem Version](https://badge.fury.io/rb/genius.svg)](http://badge.fury.io/rb/genius)
5
+
3
6
  ![Genius logo](http://assets.rapgenius.com/images/apple-touch-icon.png?1432674944)
4
7
 
5
8
  ## What does this do?
@@ -129,13 +132,16 @@ me.iq
129
132
 
130
133
  Check out [account.rb](https://github.com/timrogers/genius/blob/master/lib/genius/account.rb) or the [Genius API documentation](https://docs.genius.com/#account-h2) for a full list of available fields.
131
134
 
135
+ ### Other resources
136
+
137
+ The API library also supports working with web pages, annotations and referents in the API. See the [Genius API documentation](https://docs.genius.com/#account-h2) and the library [source](https://github.com/timrogers/genius/tree/master/lib/genius).
132
138
 
133
139
  ## Contributing
134
140
 
135
141
  If you'd like to contribute anything else, go ahead or better still, make an issue and we can talk it over and spec it out! A few quick tips:
136
142
 
137
143
  * Don't update the version numbers before your pull request - I'll sort that part out for you.
138
- * Make sure you write specs, then run them with `$ bundle exec rake`
144
+ * Make sure you write specs, then run them with `$ bundle exec rake`. When running tests, you'll want to set `GENIUS_ACCESS_TOKEN` so your requests can be authenticated - don't worry, your token will be filtered out of the `vcr` cassettes.
139
145
  * Update this README.md file so I, and users, know how your changes work
140
146
 
141
147
  ## Copyright
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "mocha", "~> 0.14.0"
27
27
  spec.add_development_dependency "webmock", "~> 1.11.0"
28
28
  spec.add_development_dependency "vcr", "~> 2.5.0"
29
+ spec.add_development_dependency "rubocop", "~> 0.31.0"
29
30
 
30
31
  spec.add_runtime_dependency "httparty", "~> 0.11.0"
31
32
  end
@@ -26,7 +26,7 @@ module Genius
26
26
  raise NotReloadableError, "An Account cannot be reloaded"
27
27
  end
28
28
 
29
- def self.find(id, params: {}, headers: {})
29
+ def self.find(*)
30
30
  raise NotImplementedError, "An Account cannot be loaded by its ID in the public API"
31
31
  end
32
32
 
@@ -34,8 +34,9 @@ module Genius
34
34
  headers = default_headers.merge(params.delete(:headers) || {})
35
35
  params = default_params.merge(params)
36
36
 
37
- new(http_get("/account", query: params, headers: headers),
38
- text_format: params[:text_format])
37
+ new(http_get("/account", query: params,
38
+ headers: headers),
39
+ text_format: params[:text_format])
39
40
  end
40
41
  end
41
42
  end
@@ -15,5 +15,44 @@ module Genius
15
15
  @id = resource["id"]
16
16
  @url = resource["url"]
17
17
  end
18
+
19
+ def update!(body = {})
20
+ response = self.class.http_put("/annotations/#{id}",
21
+ body: body,
22
+ headers: self.class.default_headers)
23
+
24
+ self.class.new(response, text_format: text_format)
25
+ end
26
+
27
+ def destroy!
28
+ self.class.http_delete("/annotations/#{id}", headers: self.class.default_headers)
29
+
30
+ true
31
+ end
32
+
33
+ def upvote!
34
+ self.class.http_put("/annotations/#{id}/upvote",
35
+ headers: self.class.default_headers)
36
+
37
+ true
38
+ end
39
+
40
+ def unvote!
41
+ self.class.http_put("/annotations/#{id}/unvote",
42
+ headers: self.class.default_headers)
43
+
44
+ true
45
+ end
46
+
47
+ def downvote!
48
+ self.class.http_put("/annotations/#{id}/downvote",
49
+ headers: self.class.default_headers)
50
+
51
+ true
52
+ end
53
+
54
+ def self.create!(body = {})
55
+ new(http_post("/annotations", body: body, headers: default_headers))
56
+ end
18
57
  end
19
58
  end
@@ -1,6 +1,7 @@
1
1
  module Genius
2
- class NotFoundError < StandardError; end
3
- class AuthenticationError < StandardError; end
4
- class MissingAccessTokenError < StandardError; end
5
- class NotReloadableError < StandardError; end
2
+ class Error < StandardError; end
3
+ class NotFoundError < Error; end
4
+ class AuthenticationError < Error; end
5
+ class MissingAccessTokenError < Error; end
6
+ class NotReloadableError < Error; end
6
7
  end
@@ -3,7 +3,7 @@ module Genius
3
3
  attr_reader :id, :url, :song_id, :annotator_id, :fragment, :range, :classification,
4
4
  :annotatable, :annotations
5
5
 
6
- def self.find(id, params: {}, headers: {})
6
+ def self.find(*)
7
7
  raise NotImplementedError, "A Referent cannot be loaded by its ID in the public API"
8
8
  end
9
9
 
@@ -10,10 +10,7 @@ module Genius
10
10
  attr_reader :raw_response, :resource
11
11
 
12
12
  def self.resource_name(resource_name = nil)
13
- if resource_name
14
- @resource_name = resource_name
15
- end
16
-
13
+ @resource_name = resource_name if resource_name
17
14
  @resource_name || name.downcase.split("::").last
18
15
  end
19
16
 
@@ -21,8 +18,10 @@ module Genius
21
18
  params = default_params.merge(params)
22
19
  headers = default_headers.merge(headers)
23
20
 
24
- new(http_get("/#{resource_name}s/#{id}", query: params, headers: headers),
25
- text_format: params[:text_format])
21
+ new(http_get("/#{resource_name}s/#{id}",
22
+ query: params,
23
+ headers: headers),
24
+ text_format: params[:text_format])
26
25
  end
27
26
 
28
27
  def reload
@@ -31,7 +30,25 @@ module Genius
31
30
 
32
31
  def self.http_get(path, query: {}, headers: {})
33
32
  response = get(path, query: query, headers: headers)
33
+ handle_response(response)
34
+ end
35
+
36
+ def self.http_post(path, body: {}, headers: {})
37
+ response = post(path, body: body, headers: headers)
38
+ handle_response(response)
39
+ end
40
+
41
+ def self.http_put(path, body: {}, headers: {})
42
+ response = put(path, body: body, headers: headers)
43
+ handle_response(response)
44
+ end
45
+
46
+ def self.http_delete(path, headers: {})
47
+ response = delete(path, headers: headers)
48
+ handle_response(response)
49
+ end
34
50
 
51
+ def self.handle_response(response)
35
52
  case response.code
36
53
  when 404 then raise NotFoundError
37
54
  when 401, 403 then raise AuthenticationError
@@ -1,3 +1,3 @@
1
1
  module Genius
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -14,7 +14,7 @@ module Genius
14
14
  @annotation_count = resource["annotation_count"]
15
15
  end
16
16
 
17
- def self.find(id, params: {}, headers: {})
17
+ def self.find(*)
18
18
  raise NotImplementedError, "A Web Page cannot be loaded by its ID in the public API"
19
19
  end
20
20
 
@@ -26,8 +26,10 @@ module Genius
26
26
  headers = default_headers.merge(params.delete(:headers) || {})
27
27
  params = default_params.merge(params)
28
28
 
29
- new(http_get("/#{resource_name}s/lookup", query: params, headers: headers),
30
- text_format: params[:text_format])
29
+ new(http_get("/#{resource_name}s/lookup",
30
+ query: params,
31
+ headers: headers),
32
+ text_format: params[:text_format])
31
33
  end
32
34
  end
33
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genius
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Rogers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-26 00:00:00.000000000 Z
11
+ date: 2015-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 2.5.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.31.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.31.0
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: httparty
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -131,7 +145,10 @@ extra_rdoc_files: []
131
145
  files:
132
146
  - ".gitignore"
133
147
  - ".rspec"
148
+ - ".rubocop.yml"
149
+ - ".rubocop_todo.yml"
134
150
  - ".travis.yml"
151
+ - CHANGELOG.md
135
152
  - CODE_OF_CONDUCT.md
136
153
  - Gemfile
137
154
  - LICENSE.txt