populr 0.1.1 → 0.1.3

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.3
data/lib/asset.rb CHANGED
@@ -12,10 +12,9 @@ class Asset < RestfulModel
12
12
  @file = file
13
13
  self.title = title
14
14
  self.description = description
15
- self.link = link
16
15
  end
17
16
 
18
- def to_json(options = {})
17
+ def as_json(options = {})
19
18
  hash = super(options)
20
19
  hash[:file] = @file if options[:api_representation] && @file
21
20
  hash
data/lib/pop.rb CHANGED
@@ -4,6 +4,7 @@ require 'tracer'
4
4
  class Pop < RestfulModel
5
5
 
6
6
  class TemplateRequired < StandardError; end
7
+ class AssetMustBeSaved < StandardError; end
7
8
 
8
9
  attr_accessor :template_id
9
10
  attr_accessor :name
@@ -25,7 +26,10 @@ class Pop < RestfulModel
25
26
 
26
27
  if template.is_a?(Template)
27
28
  self.template_id = template._id
28
- @_api = template._api
29
+ self.unpopulated_api_regions = template.api_regions
30
+ self.unpopulated_api_tags = template.api_tags
31
+
32
+ @_api = template.instance_variable_get :@_api
29
33
  else
30
34
  @_api = api_or_template
31
35
  end
@@ -76,7 +80,10 @@ class Pop < RestfulModel
76
80
  assets = [assets] unless assets.is_a?(Array)
77
81
 
78
82
  @newly_populated_regions[region_identifier] ||= []
79
- @newly_populated_regions[region_identifier].concat(assets.map {|a| a._id })
83
+ @newly_populated_regions[region_identifier].concat(assets.map {|a|
84
+ raise AssetMustBeSaved.new unless a._id
85
+ a._id
86
+ })
80
87
  self.unpopulated_api_regions.delete(region_identifier)
81
88
  end
82
89
 
data/lib/populr.rb CHANGED
@@ -13,6 +13,13 @@ class Populr
13
13
  class AccessDenied < StandardError; end
14
14
  class ResourceNotFound < StandardError; end
15
15
  class UnexpectedResponse < StandardError; end
16
+ class APIError < StandardError
17
+ attr_accessor :error_type
18
+ def initialize(type, error)
19
+ super(error)
20
+ self.error_type = type
21
+ end
22
+ end
16
23
 
17
24
  attr_accessor :api_server
18
25
  attr_reader :api_key
@@ -22,11 +29,12 @@ class Populr
22
29
  # Handle HTTP errors and RestClient errors
23
30
  raise ResourceNotFound.new if result.code.to_i == 404
24
31
  raise AccessDenied.new if result.code.to_i == 403
25
- raise UnexpectedResponse.new(result.msg) if result.is_a?(Net::HTTPClientError)
26
32
 
27
33
  # Hande content expectation errors
28
34
  raise UnexpectedResponse.new if options[:expected_class] && result.body.empty?
29
35
  json = JSON.parse(result.body)
36
+ raise APIError.new(json['error_type'], json['error']) if json.is_a?(Hash) && json['error_type']
37
+ raise UnexpectedResponse.new(result.msg) if result.is_a?(Net::HTTPClientError)
30
38
  raise UnexpectedResponse.new if options[:expected_class] && !json.is_a?(options[:expected_class])
31
39
  json
32
40
 
data/lib/restful_model.rb CHANGED
@@ -39,6 +39,10 @@ class RestfulModel
39
39
  setters.each do |setter|
40
40
  getter = setter.to_s[0..setter.to_s.index('=')-1]
41
41
  hash[getter] = self.send(getter)
42
+
43
+ if hash[getter].class.method_defined? :as_json
44
+ hash[getter] = hash[getter].as_json(options)
45
+ end
42
46
  end
43
47
  hash
44
48
  end
@@ -19,6 +19,7 @@ class RestfulModelCollection
19
19
  end
20
20
 
21
21
  def find(id)
22
+ return nil unless id
22
23
  get_restful_model(id)
23
24
  end
24
25
 
@@ -36,6 +37,8 @@ class RestfulModelCollection
36
37
 
37
38
  def inflate_collection(items = [])
38
39
  @_collection = []
40
+
41
+ return unless items.is_a?(Array)
39
42
  items.each do |json|
40
43
  if @model_class < RestfulModel
41
44
  model = @model_class.new(self)
@@ -63,7 +66,8 @@ class RestfulModelCollection
63
66
  RestClient.get(url){ |response,request,result|
64
67
  json = Populr.interpret_response(result, {:expected_class => Object})
65
68
  if @model_class < RestfulModel
66
- model = @model_class.new(self)
69
+ model = @model_class.new(@_api)
70
+ model.instance_variable_set(:@_parent, @_parent)
67
71
  model.inflate(json)
68
72
  else
69
73
  model = @model_class.new(json)
data/populr.gemspec ADDED
@@ -0,0 +1,75 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "populr"
8
+ s.version = "0.1.3"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Ben Gotow"]
12
+ s.date = "2013-04-18"
13
+ s.description = "Gem for interacting with the Populr.me API"
14
+ s.email = "ben@populr.me"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.md",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.md",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/asset.rb",
28
+ "lib/document_asset.rb",
29
+ "lib/domain.rb",
30
+ "lib/image_asset.rb",
31
+ "lib/pop.rb",
32
+ "lib/populr.rb",
33
+ "lib/restful_model.rb",
34
+ "lib/restful_model_collection.rb",
35
+ "lib/template.rb",
36
+ "lib/tracer.rb",
37
+ "populr.gemspec",
38
+ "spec/pop_spec.rb",
39
+ "spec/populr_spec.rb",
40
+ "spec/restful_model_collection_spec.rb",
41
+ "spec/restful_model_spec.rb",
42
+ "spec/spec_helper.rb",
43
+ "spec/tracer_spec.rb"
44
+ ]
45
+ s.homepage = "http://github.com/bengotow/populr"
46
+ s.licenses = ["MIT"]
47
+ s.require_paths = ["lib"]
48
+ s.rubygems_version = "1.8.10"
49
+ s.summary = "Gem for interacting with the Populr.me API"
50
+
51
+ if s.respond_to? :specification_version then
52
+ s.specification_version = 3
53
+
54
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
55
+ s.add_runtime_dependency(%q<rest-client>, [">= 1.6"])
56
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
57
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
58
+ s.add_development_dependency(%q<bundler>, ["~> 1.3.5"])
59
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
60
+ else
61
+ s.add_dependency(%q<rest-client>, [">= 1.6"])
62
+ s.add_dependency(%q<shoulda>, [">= 0"])
63
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
64
+ s.add_dependency(%q<bundler>, ["~> 1.3.5"])
65
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
66
+ end
67
+ else
68
+ s.add_dependency(%q<rest-client>, [">= 1.6"])
69
+ s.add_dependency(%q<shoulda>, [">= 0"])
70
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
71
+ s.add_dependency(%q<bundler>, ["~> 1.3.5"])
72
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
73
+ end
74
+ end
75
+
data/spec/pop_spec.rb CHANGED
@@ -8,6 +8,23 @@ describe 'Pop' do
8
8
  @api = Populr.new('key')
9
9
  end
10
10
 
11
+ describe "#initialize" do
12
+ it "should accept an API connection followed by a template" do
13
+ template = Template.new(@api)
14
+ template._id = '123'
15
+ pop = Pop.new(@api, template)
16
+ pop.template_id.should == '123'
17
+ end
18
+
19
+ it "should accept just a template" do
20
+ template = Template.new(@api)
21
+ template._id = '123'
22
+ pop = Pop.new(template)
23
+ pop.template_id.should == '123'
24
+ end
25
+
26
+ end
27
+
11
28
  describe "#inflate" do
12
29
  it "should inflate tracers into embedded tracer objects" do
13
30
  pop = Pop.new(@api)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: populr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-17 00:00:00.000000000 Z
12
+ date: 2013-04-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70289664776560 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: '1.6'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '1.6'
24
+ version_requirements: *70289664776560
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: shoulda
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &70289664776020 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: '0'
38
33
  type: :development
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
35
+ version_requirements: *70289664776020
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: rdoc
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &70289664775420 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ~>
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: '3.12'
54
44
  type: :development
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '3.12'
46
+ version_requirements: *70289664775420
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: bundler
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &70289664774880 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ~>
@@ -69,15 +54,10 @@ dependencies:
69
54
  version: 1.3.5
70
55
  type: :development
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: 1.3.5
57
+ version_requirements: *70289664774880
78
58
  - !ruby/object:Gem::Dependency
79
59
  name: jeweler
80
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &70289664774400 !ruby/object:Gem::Requirement
81
61
  none: false
82
62
  requirements:
83
63
  - - ~>
@@ -85,12 +65,7 @@ dependencies:
85
65
  version: 1.8.4
86
66
  type: :development
87
67
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: 1.8.4
68
+ version_requirements: *70289664774400
94
69
  description: Gem for interacting with the Populr.me API
95
70
  email: ben@populr.me
96
71
  executables: []
@@ -116,6 +91,7 @@ files:
116
91
  - lib/restful_model_collection.rb
117
92
  - lib/template.rb
118
93
  - lib/tracer.rb
94
+ - populr.gemspec
119
95
  - spec/pop_spec.rb
120
96
  - spec/populr_spec.rb
121
97
  - spec/restful_model_collection_spec.rb
@@ -137,7 +113,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
113
  version: '0'
138
114
  segments:
139
115
  - 0
140
- hash: -1796578390559359755
116
+ hash: -2374986328273655785
141
117
  required_rubygems_version: !ruby/object:Gem::Requirement
142
118
  none: false
143
119
  requirements:
@@ -146,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
122
  version: '0'
147
123
  requirements: []
148
124
  rubyforge_project:
149
- rubygems_version: 1.8.24
125
+ rubygems_version: 1.8.10
150
126
  signing_key:
151
127
  specification_version: 3
152
128
  summary: Gem for interacting with the Populr.me API