extended_her 0.5

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.
Files changed (66) hide show
  1. data/.gitignore +8 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +8 -0
  4. data/CONTRIBUTING.md +26 -0
  5. data/Gemfile +2 -0
  6. data/LICENSE +7 -0
  7. data/README.md +723 -0
  8. data/Rakefile +11 -0
  9. data/UPGRADE.md +32 -0
  10. data/examples/twitter-oauth/Gemfile +13 -0
  11. data/examples/twitter-oauth/app.rb +50 -0
  12. data/examples/twitter-oauth/config.ru +5 -0
  13. data/examples/twitter-oauth/views/index.haml +9 -0
  14. data/examples/twitter-search/Gemfile +12 -0
  15. data/examples/twitter-search/app.rb +55 -0
  16. data/examples/twitter-search/config.ru +5 -0
  17. data/examples/twitter-search/views/index.haml +9 -0
  18. data/extended_her.gemspec +27 -0
  19. data/lib/her.rb +23 -0
  20. data/lib/her/api.rb +108 -0
  21. data/lib/her/base.rb +17 -0
  22. data/lib/her/collection.rb +12 -0
  23. data/lib/her/errors.rb +5 -0
  24. data/lib/her/exceptions/exception.rb +4 -0
  25. data/lib/her/exceptions/record_invalid.rb +8 -0
  26. data/lib/her/exceptions/record_not_found.rb +13 -0
  27. data/lib/her/middleware.rb +9 -0
  28. data/lib/her/middleware/accept_json.rb +15 -0
  29. data/lib/her/middleware/first_level_parse_json.rb +34 -0
  30. data/lib/her/middleware/second_level_parse_json.rb +28 -0
  31. data/lib/her/model.rb +69 -0
  32. data/lib/her/model/base.rb +7 -0
  33. data/lib/her/model/hooks.rb +114 -0
  34. data/lib/her/model/http.rb +284 -0
  35. data/lib/her/model/introspection.rb +57 -0
  36. data/lib/her/model/orm.rb +191 -0
  37. data/lib/her/model/orm/comparison_methods.rb +20 -0
  38. data/lib/her/model/orm/create_methods.rb +29 -0
  39. data/lib/her/model/orm/destroy_methods.rb +53 -0
  40. data/lib/her/model/orm/error_methods.rb +19 -0
  41. data/lib/her/model/orm/fields_definition.rb +15 -0
  42. data/lib/her/model/orm/find_methods.rb +46 -0
  43. data/lib/her/model/orm/persistance_methods.rb +22 -0
  44. data/lib/her/model/orm/relation_mapper.rb +21 -0
  45. data/lib/her/model/orm/save_methods.rb +58 -0
  46. data/lib/her/model/orm/serialization_methods.rb +28 -0
  47. data/lib/her/model/orm/update_methods.rb +31 -0
  48. data/lib/her/model/paths.rb +82 -0
  49. data/lib/her/model/relationships.rb +191 -0
  50. data/lib/her/paginated_collection.rb +20 -0
  51. data/lib/her/relation.rb +94 -0
  52. data/lib/her/version.rb +3 -0
  53. data/spec/api_spec.rb +131 -0
  54. data/spec/collection_spec.rb +26 -0
  55. data/spec/middleware/accept_json_spec.rb +10 -0
  56. data/spec/middleware/first_level_parse_json_spec.rb +42 -0
  57. data/spec/middleware/second_level_parse_json_spec.rb +25 -0
  58. data/spec/model/hooks_spec.rb +406 -0
  59. data/spec/model/http_spec.rb +184 -0
  60. data/spec/model/introspection_spec.rb +59 -0
  61. data/spec/model/orm_spec.rb +552 -0
  62. data/spec/model/paths_spec.rb +286 -0
  63. data/spec/model/relationships_spec.rb +222 -0
  64. data/spec/model_spec.rb +31 -0
  65. data/spec/spec_helper.rb +46 -0
  66. metadata +222 -0
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Her::Model do
5
+ before do
6
+ Her::API.setup :url => "https://api.example.com" do |connection|
7
+ connection.use Her::Middleware::FirstLevelParseJSON
8
+ connection.adapter :test do |stub|
9
+ stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke" }.to_json] }
10
+ stub.get("/users/1/comments") { |env| [200, {}, [{ :id => 4, :body => "They're having a FIRESALE?" }].to_json] }
11
+ end
12
+ end
13
+
14
+ spawn_model("Foo::User") { has_many :comments }
15
+ spawn_model("Foo::Comment")
16
+ end
17
+ subject { Foo::User.find(1) }
18
+
19
+ describe :has_key? do
20
+ it { should_not have_key(:unknown_method_for_a_user) }
21
+ it { should_not have_key(:unknown_method_for_a_user) }
22
+ it { should have_key(:name) }
23
+ it { should have_key(:comments) }
24
+ end
25
+
26
+ describe :[] do
27
+ it { should_not have_key(:unknown_method_for_a_user) }
28
+ specify { subject[:name].should == "Tobias Fünke" }
29
+ specify { subject[:comments].first.body.should == "They're having a FIRESALE?" }
30
+ end
31
+ end
@@ -0,0 +1,46 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
+
3
+ require "rspec"
4
+ require "mocha/api"
5
+ require "her"
6
+
7
+ RSpec.configure do |config|
8
+ config.mock_with :mocha
9
+
10
+ config.before :each do
11
+ @globals = []
12
+ end
13
+
14
+ config.after :each do
15
+ @globals.each do |global|
16
+ Object.instance_eval { remove_const global } if Object.const_defined?(global)
17
+ end
18
+ end
19
+ end
20
+
21
+ class Hash
22
+ def to_json; MultiJson.dump(self); end
23
+ end
24
+
25
+ class Array
26
+ def to_json; MultiJson.dump(self); end
27
+ end
28
+
29
+ def spawn_model(klass, &block)
30
+ if klass =~ /::/
31
+ base, submodel = klass.split(/::/).map{ |s| s.to_sym }
32
+ Object.const_set(base, Module.new) unless Object.const_defined?(base)
33
+ Object.const_get(base).module_eval do
34
+ remove_const submodel if constants.include?(submodel)
35
+ submodel = const_set(submodel, Class.new)
36
+ submodel.send(:include, Her::Model)
37
+ submodel.class_eval(&block) if block_given?
38
+ end
39
+ @globals << base
40
+ else
41
+ Object.instance_eval { remove_const klass } if Object.const_defined?(klass)
42
+ Object.const_set(klass, Class.new).send(:include, Her::Model)
43
+ Object.const_get(klass).class_eval(&block) if block_given?
44
+ @globals << klass.to_sym
45
+ end
46
+ end
metadata ADDED
@@ -0,0 +1,222 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: extended_her
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: '0.5'
6
+ platform: ruby
7
+ authors:
8
+ - Rémi Prévost
9
+ - Gregory Eremin
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-02-28 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ version_requirements: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '10.0'
21
+ none: false
22
+ name: rake
23
+ type: :development
24
+ prerelease: false
25
+ requirement: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '10.0'
30
+ none: false
31
+ - !ruby/object:Gem::Dependency
32
+ version_requirements: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ version: '2.12'
37
+ none: false
38
+ name: rspec
39
+ type: :development
40
+ prerelease: false
41
+ requirement: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.12'
46
+ none: false
47
+ - !ruby/object:Gem::Dependency
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ version: '0.13'
53
+ none: false
54
+ name: mocha
55
+ type: :development
56
+ prerelease: false
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.13'
62
+ none: false
63
+ - !ruby/object:Gem::Dependency
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 3.0.0
69
+ none: false
70
+ name: activesupport
71
+ type: :runtime
72
+ prerelease: false
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 3.0.0
78
+ none: false
79
+ - !ruby/object:Gem::Dependency
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ~>
83
+ - !ruby/object:Gem::Version
84
+ version: '0.8'
85
+ none: false
86
+ name: faraday
87
+ type: :runtime
88
+ prerelease: false
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '0.8'
94
+ none: false
95
+ - !ruby/object:Gem::Dependency
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ~>
99
+ - !ruby/object:Gem::Version
100
+ version: '1.5'
101
+ none: false
102
+ name: multi_json
103
+ type: :runtime
104
+ prerelease: false
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '1.5'
110
+ none: false
111
+ description: Her is an ORM that maps REST resources and collections to Ruby objects
112
+ email:
113
+ - remi@exomel.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - .rspec
120
+ - .travis.yml
121
+ - CONTRIBUTING.md
122
+ - Gemfile
123
+ - LICENSE
124
+ - README.md
125
+ - Rakefile
126
+ - UPGRADE.md
127
+ - examples/twitter-oauth/Gemfile
128
+ - examples/twitter-oauth/app.rb
129
+ - examples/twitter-oauth/config.ru
130
+ - examples/twitter-oauth/views/index.haml
131
+ - examples/twitter-search/Gemfile
132
+ - examples/twitter-search/app.rb
133
+ - examples/twitter-search/config.ru
134
+ - examples/twitter-search/views/index.haml
135
+ - extended_her.gemspec
136
+ - lib/her.rb
137
+ - lib/her/api.rb
138
+ - lib/her/base.rb
139
+ - lib/her/collection.rb
140
+ - lib/her/errors.rb
141
+ - lib/her/exceptions/exception.rb
142
+ - lib/her/exceptions/record_invalid.rb
143
+ - lib/her/exceptions/record_not_found.rb
144
+ - lib/her/middleware.rb
145
+ - lib/her/middleware/accept_json.rb
146
+ - lib/her/middleware/first_level_parse_json.rb
147
+ - lib/her/middleware/second_level_parse_json.rb
148
+ - lib/her/model.rb
149
+ - lib/her/model/base.rb
150
+ - lib/her/model/hooks.rb
151
+ - lib/her/model/http.rb
152
+ - lib/her/model/introspection.rb
153
+ - lib/her/model/orm.rb
154
+ - lib/her/model/orm/comparison_methods.rb
155
+ - lib/her/model/orm/create_methods.rb
156
+ - lib/her/model/orm/destroy_methods.rb
157
+ - lib/her/model/orm/error_methods.rb
158
+ - lib/her/model/orm/fields_definition.rb
159
+ - lib/her/model/orm/find_methods.rb
160
+ - lib/her/model/orm/persistance_methods.rb
161
+ - lib/her/model/orm/relation_mapper.rb
162
+ - lib/her/model/orm/save_methods.rb
163
+ - lib/her/model/orm/serialization_methods.rb
164
+ - lib/her/model/orm/update_methods.rb
165
+ - lib/her/model/paths.rb
166
+ - lib/her/model/relationships.rb
167
+ - lib/her/paginated_collection.rb
168
+ - lib/her/relation.rb
169
+ - lib/her/version.rb
170
+ - spec/api_spec.rb
171
+ - spec/collection_spec.rb
172
+ - spec/middleware/accept_json_spec.rb
173
+ - spec/middleware/first_level_parse_json_spec.rb
174
+ - spec/middleware/second_level_parse_json_spec.rb
175
+ - spec/model/hooks_spec.rb
176
+ - spec/model/http_spec.rb
177
+ - spec/model/introspection_spec.rb
178
+ - spec/model/orm_spec.rb
179
+ - spec/model/paths_spec.rb
180
+ - spec/model/relationships_spec.rb
181
+ - spec/model_spec.rb
182
+ - spec/spec_helper.rb
183
+ homepage: http://remiprev.github.com/her
184
+ licenses:
185
+ - MIT
186
+ post_install_message:
187
+ rdoc_options: []
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ! '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ none: false
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ! '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ none: false
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 1.8.23
205
+ signing_key:
206
+ specification_version: 3
207
+ summary: A simple Representational State Transfer-based Hypertext Transfer Protocol-powered
208
+ Object Relational Mapper. Her?
209
+ test_files:
210
+ - spec/api_spec.rb
211
+ - spec/collection_spec.rb
212
+ - spec/middleware/accept_json_spec.rb
213
+ - spec/middleware/first_level_parse_json_spec.rb
214
+ - spec/middleware/second_level_parse_json_spec.rb
215
+ - spec/model/hooks_spec.rb
216
+ - spec/model/http_spec.rb
217
+ - spec/model/introspection_spec.rb
218
+ - spec/model/orm_spec.rb
219
+ - spec/model/paths_spec.rb
220
+ - spec/model/relationships_spec.rb
221
+ - spec/model_spec.rb
222
+ - spec/spec_helper.rb