reddit-base 0.3.1 → 0.4.0

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: 04b8cd781236070038145739f35ad484bbb7c3c1
4
- data.tar.gz: ff98d9f539a4fddbe7ccd5b299afae68f266c67a
3
+ metadata.gz: 4232cd6654bdea59d59a30f9ab7ec08edd20c0b8
4
+ data.tar.gz: 07d3bfef1b8886603e6b1fabf3ffbd7db59ff311
5
5
  SHA512:
6
- metadata.gz: 5f61050f2f8dac84d0ae6c7b0cb8513917d2b6d4195646b7ddb116f975df623caa7a949e2a01379abf9b82a06a0d9bc4daff5a425f99ff6edbdfbfd6ea6a8ad8
7
- data.tar.gz: d3798e08febb37b6833bb4794d411e335c7430d9472108e23d449bfa9ebe2a3c2c5be236b460d32df998ed7363acb7e727886daa0a266408126428201674f4be
6
+ metadata.gz: 2c8ec53b4ece9178ade713a2ec316af9e23da7474517c14904f34cd8cccb273b0f9e1f405023576f6fc56e524910d5510eead64fff3c0febe2e87fe3b5ddfea8
7
+ data.tar.gz: 508f49c87fefbdb5804aab9f01eca73d8029f1ae36163abd29133ee75bc340b6b53687a5e17dee7440bbf4b7c4d139f16011021772a6d8e9a3dffb42a69589af
data/README.md CHANGED
@@ -3,6 +3,8 @@ Reddit Base
3
3
 
4
4
  A minimal reddit API client for Ruby.
5
5
 
6
+ [![Gem Version](https://badge.fury.io/rb/reddit-base.png)](http://badge.fury.io/rb/reddit-base)
7
+
6
8
  Motivation
7
9
  ----------
8
10
 
@@ -90,18 +92,39 @@ For example, uploading an image to a subreddit you moderate:
90
92
 
91
93
  ```ruby
92
94
  image_upload = Reddit::Base::UploadIO.new('/path/to/your/image.png', 'image/png')
93
- reddit.post('/api/upload_sr_img.json', r: SUBREDDIT, file: image_upload, header: 0, name: 'example'
95
+ client.post('/api/upload_sr_img.json', r: SUBREDDIT, file: image_upload, header: 0, name: 'example'
96
+ ```
97
+
98
+ ### Traversal
99
+
100
+ `Client` returns a type of `Hashie::Mash` so instead of:
101
+
102
+ ```ruby
103
+ client.get('/r/AskReddit')['data']['children']
94
104
  ```
95
105
 
96
- ### Helpers
106
+ You can do:
97
107
 
98
- `Client#get` and `Client#post` accept a `simplify` option to flatten data and kind attributes
99
- for easier traversal:
108
+ ```ruby
109
+ client.get('/r/AskReddit').data.children
110
+ ```
111
+
112
+ As a bonus it also forwards any missed methods along to its `data` attribute, so you can take it a step
113
+ further and just do:
100
114
 
101
115
  ```ruby
102
- client.get('/r/AskReddit', simplify: true)
116
+ client.get('/r/AskReddit').children
103
117
  ```
104
118
 
119
+ Frequently Asked Questions
120
+ --------------------------
121
+
122
+ ### Why do some requests 403 the first time but succeed when repeated?
123
+
124
+ The most common cause is that you're attempting to access something private and your modhash hasn't
125
+ been set yet. Try making a request against a public endpoint (e.g. `client.get('/r/AskReddit')`) at
126
+ the start of each session.
127
+
105
128
  Recommended Reading
106
129
  -------------------
107
130
 
@@ -7,6 +7,7 @@ require 'reddit/base/version'
7
7
  require 'reddit/base/basic_client'
8
8
  require 'reddit/base/client'
9
9
  require 'reddit/base/helpers'
10
+ require 'reddit/base/mash'
10
11
  require 'reddit/base/upload_io'
11
12
 
12
13
  module Reddit
@@ -1,3 +1,5 @@
1
+ require 'hashie'
2
+
1
3
  module Reddit
2
4
  module Base
3
5
  # Client that does everything BasicClient does but also attempts to
@@ -11,17 +13,13 @@ module Reddit
11
13
  end
12
14
 
13
15
  def get(*args, **options)
14
- simplify = options.delete(:simplify)
15
16
  body = connection.get(*args, **options).body
16
- body = Reddit::Base::Helpers.simplify body if simplify
17
- body
17
+ Mash.new body
18
18
  end
19
19
 
20
20
  def post(*args, **options)
21
- simplify = options.delete(:simplify)
22
21
  body = connection.post(*args, **options).body
23
- body = Reddit::Base::Helpers.simplify body if simplify
24
- body
22
+ Mash.new body
25
23
  end
26
24
  end
27
25
  end
@@ -1,22 +1,6 @@
1
1
  module Reddit
2
2
  module Base
3
3
  module Helpers
4
- def self.simplify(json)
5
- return json unless json.is_a? Hash
6
-
7
- if json['data']
8
- json['data']['kind'] = json['kind'] if json['data'].is_a? Hash
9
- json = simplify json['data']
10
- elsif json['children']
11
- json['children'] = json['children'].map { |child| simplify child }
12
- else
13
- json.keys.each do |key|
14
- json[key] = simplify json[key]
15
- end
16
- end
17
-
18
- json
19
- end
20
4
  end
21
5
  end
22
6
  end
@@ -0,0 +1,17 @@
1
+ module Reddit
2
+ module Base
3
+ class Mash < Hashie::Mash
4
+ def method_missing(method, *args, &block)
5
+ if self['data'] && self['data'].has_key?(method)
6
+ self['data'].send(method, *args, &block)
7
+ else
8
+ super(method, *args, &block)
9
+ end
10
+ end
11
+
12
+ def respond_to?(method)
13
+ (self.respond_to?(:data) && self.data.respond_to?(method)) || super
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  module Reddit
2
2
  module Base
3
- VERSION = '0.3.1'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "rake"
26
26
 
27
27
  spec.add_dependency 'faraday_middleware-reddit', '0.3.1'
28
+ spec.add_dependency 'hashie', '~> 2.1.1'
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reddit-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel O'Brien
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-26 00:00:00.000000000 Z
11
+ date: 2014-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.3.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: hashie
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.1.1
55
69
  description: |-
56
70
  A minimal reddit API client for Ruby that
57
71
  simplifies concerns such as authentication, rate limiting and extracting
@@ -71,6 +85,7 @@ files:
71
85
  - lib/reddit/base/basic_client.rb
72
86
  - lib/reddit/base/client.rb
73
87
  - lib/reddit/base/helpers.rb
88
+ - lib/reddit/base/mash.rb
74
89
  - lib/reddit/base/upload_io.rb
75
90
  - lib/reddit/base/version.rb
76
91
  - reddit-base.gemspec