leanpub_api 0.0.3 → 0.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: 37bc58a39fa57fd3944ef066cbda7f59948b25e6
4
- data.tar.gz: 171a4ae7ebae429ecdddb68e3a0b9ec732c2a815
3
+ metadata.gz: 4db60a908c6f155cc67f120aa35fdac2dbdd7736
4
+ data.tar.gz: a300c1be11843a68a5501a26e85a7b3287d5b983
5
5
  SHA512:
6
- metadata.gz: be1129d41c89d80c54b0810fd266f406dfb767684ddff8686c85c76a00b66adf7de2dfc676f73b0570a67cdce795b86c2399a9b4caee9f92aab8e643786a0e15
7
- data.tar.gz: 66083bedd5b5305584f475843a323820fb2ffe7239f503977e9152bd5170095ef13b7542acff520142b61f822a1a3fdbc1082762c144caa7aac6dbb618201784
6
+ metadata.gz: 4680adc4fbf7edddc3d09475e36588920475df53b55a45986cf805f4c4f508f1fe5da2cf469f31d3db0aa5f54750128a7a90263aa4fd79adcbae277914bb3fd5
7
+ data.tar.gz: dae321d7683841af5c90149bb6036da0ace3d70b0dfb90e479ed71630d6e644bd80f5844bbcae0466e5a4c91bdd9f199fad3c0219e6a8aaf536d5337ec577d33
data/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ # Changelog
2
+
3
+ ## 0.0.4
4
+
5
+ - Support for Leanpub book sales summary
6
+ - Refactor HTTP connection stuff to base class
7
+ - Remove warnings about pessimistic dependencies
8
+
9
+ ## 0.0.3
10
+
11
+ - Initial release
12
+ - Support for Leanpub book summary
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Leanpub API wrapper for Ruby
2
2
 
3
- A simple Ruby wrapper for the [Leanpub API](https://leanpub.com/help/api). Currently supports the API's book summary functions, with aspirations to do
3
+ A simple Ruby wrapper for the [Leanpub API](https://leanpub.com/help/api). Currently supports the API's book and sales summary functions, with aspirations to do
4
4
  more.
5
5
 
6
6
  **Disclaimer:** Leanpub is a service of Ruboss Technology Corporation, a
@@ -35,7 +35,7 @@ by [accessing your Leanpub account](https://leanpub.com/dashboard).
35
35
  The gem currently supports the Leanpub API's book summary functions.
36
36
 
37
37
  ```ruby
38
- require 'leanpub_api_'
38
+ require 'leanpub_api'
39
39
 
40
40
  book = LeanpubAPI::BookSummary.new('<book-slug>', '<api-key>')
41
41
 
@@ -52,6 +52,26 @@ puts book.total_revenue
52
52
  puts book.possible_reader_count
53
53
  ```
54
54
 
55
+ You can also get the sales summary for a Leanpub book.
56
+
57
+ ```ruby
58
+ require 'leanpub_api'
59
+
60
+ sales = LeanpubAPI::SalesSummary.new('<book-slug>', '<api-key>')
61
+
62
+ puts sales.book
63
+ puts sales.url
64
+ puts sales.total_author_royalties
65
+ puts sales.total_book_royalties
66
+ puts sales.num_happy_readers
67
+ puts sales.num_happy_paid_purchases
68
+ puts sales.num_refunded_purchases
69
+ puts sales.unpaid_royalties
70
+ puts sales.royalties_currently_due
71
+ puts sales.royalties_due_on_first_of_next_month
72
+ puts sales.paid_royalties
73
+ ```
74
+
55
75
  ## Development
56
76
 
57
77
  Tests expect a `.env` file at the project's root, with the following
@@ -64,14 +84,13 @@ environment variables:
64
84
 
65
85
  Add wrappers for other API functionality:
66
86
 
67
- - Sales summary
68
87
  - All sales data
69
88
  - Preview functions
70
89
  - Publish functions
71
90
  - Preview/publish job status
72
91
  - Coupon management
73
92
 
74
- Improve configuration
93
+ Test against other Rubies
75
94
 
76
95
  ## Contributing
77
96
 
data/leanpub_api.gemspec CHANGED
@@ -18,11 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_runtime_dependency "httparty", "~> 0.12.0"
21
+ spec.add_runtime_dependency "httparty", '~> 0.12.0', '>= 0.12.0'
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.3"
24
- spec.add_development_dependency "rake", "~> 10.1.1"
25
- spec.add_development_dependency "webmock", "~> 1.14.0"
26
- spec.add_development_dependency "vcr", "~> 2.6.0"
27
- spec.add_development_dependency "dotenv", "~> 0.9.0"
23
+ spec.add_development_dependency "bundler", '~> 1.3'
24
+ spec.add_development_dependency "rake", '~> 10.1', '>= 10.1.1'
25
+ spec.add_development_dependency "webmock", '~> 1.14', '>= 1.14.0'
26
+ spec.add_development_dependency "vcr", '~> 2.6', '>= 2.6.0'
27
+ spec.add_development_dependency "dotenv", '~> 0.9', '>= 0.9.0'
28
28
  end
@@ -0,0 +1,25 @@
1
+ module LeanpubAPI
2
+ class Base
3
+ include HTTParty
4
+ base_uri 'https://leanpub.com'
5
+
6
+ def initialize(book_slug, api_key)
7
+ @book_slug = book_slug
8
+ @api_key = api_key
9
+ end
10
+
11
+ def info(force = false)
12
+ force ? @info = get_info : @info ||= get_info
13
+ end
14
+
15
+ def method_missing(name, *args, &block)
16
+ info.has_key?(name.to_s) ? info[name.to_s] : super
17
+ end
18
+
19
+ private
20
+
21
+ def get_info
22
+ self.class.get(path)
23
+ end
24
+ end
25
+ end
@@ -1,27 +1,7 @@
1
1
  module LeanpubAPI
2
- class BookSummary
3
- include HTTParty
4
- base_uri 'https://leanpub.com'
5
-
6
- def initialize(book_slug, api_key)
7
- @book_slug = book_slug
8
- @api_key = api_key
9
- end
10
-
11
- def info(force = false)
12
- force ? @info = get_info : @info ||= get_info
13
- end
14
-
15
- def method_missing(name, *args, &block)
16
- info.has_key?(name.to_s) ? info[name.to_s] : super
17
- end
18
-
2
+ class BookSummary < LeanpubAPI::Base
19
3
  private
20
4
 
21
- def get_info
22
- self.class.get(path)
23
- end
24
-
25
5
  def path
26
6
  "/#{@book_slug}.json?api_key=#{@api_key}"
27
7
  end
@@ -0,0 +1,9 @@
1
+ module LeanpubAPI
2
+ class SalesSummary < LeanpubAPI::Base
3
+ private
4
+
5
+ def path
6
+ "/#{@book_slug}/sales.json?api_key=#{@api_key}"
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module LeanpubAPI
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -0,0 +1,57 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://leanpub.com/<LEANPUB_BOOK_SLUG>/sales.json?api_key=<LEANPUB_API_KEY>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Cache-Control:
16
+ - max-age=0, private, must-revalidate
17
+ - no-cache="set-cookie"
18
+ Content-Type:
19
+ - application/json; charset=utf-8
20
+ Date:
21
+ - Mon, 17 Feb 2014 01:12:04 GMT
22
+ Etag:
23
+ - '"64209636cfbe12942dd4c85877804afa"'
24
+ Server:
25
+ - nginx + Phusion Passenger 4.0.29
26
+ Set-Cookie:
27
+ - AWSELB=BF7915350C754439EF4952CB0CB801868D298314801C9FE6ECB1E0A62F0A1CC471D3F7B3BCEF808A2A657B84781E305B69B23522CD91D8473382F22DEB898C2514173621FE;PATH=/
28
+ - cookied-flash=%7B%7D; path=/; secure
29
+ - domain-info=%7B%22root%22%3A%22https%3A%2F%2Fleanpub.com%2F%22%7D; path=/;
30
+ expires=Tue, 18-Feb-2014 01:12:04 GMT; secure
31
+ - remember_token=d1248d8ebf3303d1f74c2788df68b618f841c5e2; path=/; expires=Tue,
32
+ 17-Feb-2015 01:12:04 GMT; secure
33
+ - user-info=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT; secure
34
+ Status:
35
+ - 200 OK
36
+ Strict-Transport-Security:
37
+ - max-age=31536000
38
+ X-Powered-By:
39
+ - Phusion Passenger 4.0.29
40
+ X-Rack-Cache:
41
+ - miss
42
+ X-Request-Id:
43
+ - 84ff9ce7201fc68fd7125e2d5b96753b
44
+ X-Runtime:
45
+ - '0.126614'
46
+ X-Ua-Compatible:
47
+ - IE=Edge,chrome=1
48
+ Transfer-Encoding:
49
+ - chunked
50
+ Connection:
51
+ - keep-alive
52
+ body:
53
+ encoding: UTF-8
54
+ string: '{"book":"<LEANPUB_BOOK_SLUG>","url":"https://leanpub.com/<LEANPUB_BOOK_SLUG>","total_author_royalties":"23456.78","total_book_royalties":"3456.78","num_happy_readers":3534,"num_happy_paid_purchases":3522,"num_refunded_purchases":12,"unpaid_royalties":"1208.75","royalties_currently_due":"0.0","royalties_due_on_first_of_next_month":"1208.75","paid_royalties":"12345.67"}'
55
+ http_version:
56
+ recorded_at: Mon, 17 Feb 2014 01:12:25 GMT
57
+ recorded_with: VCR 2.6.0
@@ -0,0 +1,13 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe LeanpubAPI::Base do
4
+ describe "default attributes" do
5
+ it "include HTTParty methods" do
6
+ LeanpubAPI::BookSummary.must_include HTTParty
7
+ end
8
+
9
+ it "have the base URL set to the Leanpub API endpoint" do
10
+ LeanpubAPI::BookSummary.base_uri.must_equal 'https://leanpub.com'
11
+ end
12
+ end
13
+ end
@@ -1,16 +1,6 @@
1
1
  require_relative '../../spec_helper'
2
2
 
3
3
  describe LeanpubAPI::BookSummary do
4
- describe "default attributes" do
5
- it "include HTTParty methods" do
6
- LeanpubAPI::BookSummary.must_include HTTParty
7
- end
8
-
9
- it "have the base URL set to the Leanpub API endpoint" do
10
- LeanpubAPI::BookSummary.base_uri.must_equal 'https://leanpub.com'
11
- end
12
- end
13
-
14
4
  describe "GET book info" do
15
5
  let(:summary) { LeanpubAPI::BookSummary.new(book_slug, api_key) }
16
6
 
@@ -0,0 +1,66 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe LeanpubAPI::SalesSummary do
4
+ describe "GET sales summary info" do
5
+ let(:summary) { LeanpubAPI::SalesSummary.new(book_slug, api_key) }
6
+
7
+ before :each do
8
+ VCR.insert_cassette 'sales_summary', record: :new_episodes
9
+ end
10
+
11
+ after :each do
12
+ VCR.eject_cassette
13
+ end
14
+
15
+ it "has data" do
16
+ summary.must_respond_to :info
17
+ end
18
+
19
+ it "parses the JSON response to a hash" do
20
+ summary.info.must_be_instance_of Hash
21
+ end
22
+
23
+ it "performs the request and gets the data" do
24
+ summary.info["book"].must_equal "everydayrailsrspec"
25
+ summary.info["url"].must_equal "https://leanpub.com/everydayrailsrspec"
26
+ summary.info["total_author_royalties"].must_equal "23456.78"
27
+ summary.info["total_book_royalties"].must_equal "3456.78"
28
+ summary.info["num_happy_readers"].must_equal 3534
29
+ summary.info["num_happy_paid_purchases"].must_equal 3522
30
+ summary.info["num_refunded_purchases"].must_equal 12
31
+ summary.info["unpaid_royalties"].must_equal "1208.75"
32
+ summary.info["royalties_currently_due"].must_equal "0.0"
33
+ summary.info["royalties_due_on_first_of_next_month"].must_equal "1208.75"
34
+ summary.info["paid_royalties"].must_equal "12345.67"
35
+ end
36
+
37
+ describe "dynamic attributes" do
38
+ before do
39
+ summary.info
40
+ end
41
+
42
+ it "returns an attribute if present in the info" do
43
+ summary.num_happy_readers.must_equal 3534
44
+ end
45
+
46
+ it "raises method missing if an attribute is not present in the info" do
47
+ lambda { summary.bad_attribute }.must_raise NoMethodError
48
+ end
49
+ end
50
+
51
+ describe "caching" do
52
+ before do
53
+ summary.info
54
+ stub_request(:any, /leanpub.com/).to_timeout
55
+ end
56
+
57
+ it "caches the info" do
58
+ summary.info.must_be_instance_of Hash
59
+ end
60
+
61
+ it "refreshes the info if forced" do
62
+ lambda { summary.info(true) }.must_raise Timeout::Error
63
+ end
64
+ end
65
+ end
66
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leanpub_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Sumner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-13 00:00:00.000000000 Z
11
+ date: 2014-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.12.0
20
+ - - '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 0.12.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
26
29
  version: 0.12.0
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.12.0
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: bundler
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -43,6 +49,9 @@ dependencies:
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
51
  - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '10.1'
54
+ - - '>='
46
55
  - !ruby/object:Gem::Version
47
56
  version: 10.1.1
48
57
  type: :development
@@ -50,6 +59,9 @@ dependencies:
50
59
  version_requirements: !ruby/object:Gem::Requirement
51
60
  requirements:
52
61
  - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: '10.1'
64
+ - - '>='
53
65
  - !ruby/object:Gem::Version
54
66
  version: 10.1.1
55
67
  - !ruby/object:Gem::Dependency
@@ -57,6 +69,9 @@ dependencies:
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
71
  - - ~>
72
+ - !ruby/object:Gem::Version
73
+ version: '1.14'
74
+ - - '>='
60
75
  - !ruby/object:Gem::Version
61
76
  version: 1.14.0
62
77
  type: :development
@@ -64,6 +79,9 @@ dependencies:
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
66
81
  - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: '1.14'
84
+ - - '>='
67
85
  - !ruby/object:Gem::Version
68
86
  version: 1.14.0
69
87
  - !ruby/object:Gem::Dependency
@@ -71,6 +89,9 @@ dependencies:
71
89
  requirement: !ruby/object:Gem::Requirement
72
90
  requirements:
73
91
  - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '2.6'
94
+ - - '>='
74
95
  - !ruby/object:Gem::Version
75
96
  version: 2.6.0
76
97
  type: :development
@@ -78,6 +99,9 @@ dependencies:
78
99
  version_requirements: !ruby/object:Gem::Requirement
79
100
  requirements:
80
101
  - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '2.6'
104
+ - - '>='
81
105
  - !ruby/object:Gem::Version
82
106
  version: 2.6.0
83
107
  - !ruby/object:Gem::Dependency
@@ -85,6 +109,9 @@ dependencies:
85
109
  requirement: !ruby/object:Gem::Requirement
86
110
  requirements:
87
111
  - - ~>
112
+ - !ruby/object:Gem::Version
113
+ version: '0.9'
114
+ - - '>='
88
115
  - !ruby/object:Gem::Version
89
116
  version: 0.9.0
90
117
  type: :development
@@ -92,6 +119,9 @@ dependencies:
92
119
  version_requirements: !ruby/object:Gem::Requirement
93
120
  requirements:
94
121
  - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: '0.9'
124
+ - - '>='
95
125
  - !ruby/object:Gem::Version
96
126
  version: 0.9.0
97
127
  description: A simple Ruby wrapper for the Leanpub API.
@@ -102,16 +132,22 @@ extensions: []
102
132
  extra_rdoc_files: []
103
133
  files:
104
134
  - .gitignore
135
+ - CHANGELOG.md
105
136
  - Gemfile
106
137
  - LICENSE.txt
107
138
  - README.md
108
139
  - Rakefile
109
140
  - leanpub_api.gemspec
110
141
  - lib/leanpub_api.rb
142
+ - lib/leanpub_api/base.rb
111
143
  - lib/leanpub_api/book_summary.rb
144
+ - lib/leanpub_api/sales_summary.rb
112
145
  - lib/leanpub_api/version.rb
113
146
  - spec/fixtures/leanpub_cassettes/book_summary.yml
147
+ - spec/fixtures/leanpub_cassettes/sales_summary.yml
148
+ - spec/lib/leanpub_api/base_spec.rb
114
149
  - spec/lib/leanpub_api/book_summary_spec.rb
150
+ - spec/lib/leanpub_api/sales_summary_spec.rb
115
151
  - spec/spec_helper.rb
116
152
  homepage: https://github.com/ruralocity/leanpub-api
117
153
  licenses:
@@ -140,5 +176,8 @@ summary: A simple Ruby wrapper for the Leanpub API. Not affiliated with Leanpub
140
176
  Ruboss Technology Corporation.
141
177
  test_files:
142
178
  - spec/fixtures/leanpub_cassettes/book_summary.yml
179
+ - spec/fixtures/leanpub_cassettes/sales_summary.yml
180
+ - spec/lib/leanpub_api/base_spec.rb
143
181
  - spec/lib/leanpub_api/book_summary_spec.rb
182
+ - spec/lib/leanpub_api/sales_summary_spec.rb
144
183
  - spec/spec_helper.rb