populr 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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