dish 0.0.1 → 0.0.2
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 +4 -4
- data/.travis.yml +7 -0
- data/README.md +36 -0
- data/lib/dish.rb +1 -8
- data/lib/dish/helper.rb +7 -0
- data/lib/dish/motion.rb +9 -0
- data/lib/dish/plate.rb +13 -10
- data/lib/dish/version.rb +1 -1
- data/test/dish_test.rb +20 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b80bdc6eac863a3ca01536cb0af8034ebfdab5a3
|
4
|
+
data.tar.gz: 993e1729fc762ebbdd7857e1c17f162a3c48d476
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b219fc03d52b0dbdf9610d583cd2e76af17665fefec414dadade3bbf9c8379ef070923d0b4715903e09834bb3538196c2e97156eec41028a53b505b40ac8b86
|
7
|
+
data.tar.gz: 7fc189d6b1fee5c77d6ea06a8afeb40f5009be2797fe35a885acf71cd6c6a994170b0a131163cd694e77e47609b1b9b4490460392f900f320a2e09e054c8bbf7
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
[](http://travis-ci.org/lassebunk/dish)
|
2
|
+
|
1
3
|
# Dish!
|
2
4
|
|
5
|
+

|
6
|
+
|
3
7
|
Very simple conversion of hashes to plain Ruby objects.
|
4
8
|
This is great for consuming JSON API's which is what I use it for.
|
5
9
|
|
@@ -21,6 +25,22 @@ If you want a `to_dish` helper method added to your Hash and Array objects, you
|
|
21
25
|
|
22
26
|
gem "dish", require: "dish/ext"
|
23
27
|
|
28
|
+
### Installation in RubyMotion
|
29
|
+
|
30
|
+
Dish fully supports [RubyMotion](http://www.rubymotion.com/), enabling you to easily consume JSON API's in your Ruby iOS apps.
|
31
|
+
|
32
|
+
For installation in RubyMotion, add this line to your project's *Gemfile*:
|
33
|
+
|
34
|
+
gem "dish", require: "dish/motion"
|
35
|
+
|
36
|
+
Then run:
|
37
|
+
|
38
|
+
$ bundle
|
39
|
+
|
40
|
+
And you're good to go.
|
41
|
+
|
42
|
+
Note: If you're using Dish with the BubbleWrap JSON module, please see below.
|
43
|
+
|
24
44
|
# Example
|
25
45
|
|
26
46
|
hash = {
|
@@ -41,6 +61,22 @@ If you want a `to_dish` helper method added to your Hash and Array objects, you
|
|
41
61
|
book.other # => nil
|
42
62
|
book.other? # => false
|
43
63
|
|
64
|
+
## Notes
|
65
|
+
|
66
|
+
### Using with the BubbleWrap JSON module
|
67
|
+
|
68
|
+
When you use the [BubbleWrap](https://github.com/rubymotion/BubbleWrap) gem to parse JSON into a hash, you can't use the
|
69
|
+
`to_dish` methods directly because the `BW::JSON` module returns some sort of hash that hasn't got the methods from the real hash. I'm
|
70
|
+
fixing this, but in the meanwhile you can achieve the same result by doing this:
|
71
|
+
|
72
|
+
BW::HTTP.get("http://path.to/api/books/2") do |response|
|
73
|
+
json = BW::JSON.parse(response.body.to_s)
|
74
|
+
book = Dish(json) # This is the actual conversion
|
75
|
+
|
76
|
+
title_label.text = book.title
|
77
|
+
author_label.text = book.authors.map(&:name).join(", ")
|
78
|
+
end
|
79
|
+
|
44
80
|
## Contributing
|
45
81
|
|
46
82
|
Feature additions are very welcome, but please submit an issue first, so we can discuss it in advance. Thanks.
|
data/lib/dish.rb
CHANGED
data/lib/dish/helper.rb
ADDED
data/lib/dish/motion.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
unless defined?(Motion::Project::Config)
|
2
|
+
raise "This file must be required within a RubyMotion project Rakefile."
|
3
|
+
end
|
4
|
+
|
5
|
+
Motion::Project::App.setup do |app|
|
6
|
+
Dir[File.join(File.dirname(__FILE__), "**/*.rb")].each do |file|
|
7
|
+
app.files.unshift(file) unless file =~ /\/(ext|motion)\.rb$/ # Exclude ext.rb because it uses `require`
|
8
|
+
end
|
9
|
+
end
|
data/lib/dish/plate.rb
CHANGED
@@ -1,27 +1,30 @@
|
|
1
1
|
module Dish
|
2
2
|
class Plate
|
3
3
|
def initialize(hash)
|
4
|
-
hash.
|
5
|
-
dish_metaclass.send(:define_method, key) do
|
6
|
-
dish_convert_value(value)
|
7
|
-
end
|
8
|
-
end
|
4
|
+
@dish_original_hash = Hash[hash.map { |k, v| [k.to_s, v] }]
|
9
5
|
end
|
10
6
|
|
11
7
|
def method_missing(method, *args, &block)
|
12
8
|
method = method.to_s
|
13
9
|
if method.end_with?("?")
|
14
|
-
|
15
|
-
dish_check_for_presence(
|
10
|
+
key = method[0..-2]
|
11
|
+
dish_check_for_presence(key)
|
16
12
|
else
|
17
|
-
|
13
|
+
dish_get_value(method)
|
18
14
|
end
|
19
15
|
end
|
20
16
|
|
21
17
|
private
|
22
18
|
|
23
|
-
|
24
|
-
|
19
|
+
attr_reader :dish_original_hash
|
20
|
+
|
21
|
+
def dish_get_value(key)
|
22
|
+
value = dish_original_hash[key]
|
23
|
+
dish_convert_value(value)
|
24
|
+
end
|
25
|
+
|
26
|
+
def dish_check_for_presence(key)
|
27
|
+
!!dish_get_value(key)
|
25
28
|
end
|
26
29
|
|
27
30
|
def dish_convert_value(value)
|
data/lib/dish/version.rb
CHANGED
data/test/dish_test.rb
CHANGED
@@ -16,11 +16,31 @@ class DishTest < Test::Unit::TestCase
|
|
16
16
|
assert_equal 2, book.authors.length
|
17
17
|
assert_equal "Well D.", book.authors[1].name
|
18
18
|
assert_equal true, book.title?
|
19
|
+
assert_equal false, book.active
|
19
20
|
assert_equal false, book.active?
|
20
21
|
assert_nil book.other
|
21
22
|
assert_equal false, book.other?
|
22
23
|
end
|
23
24
|
|
25
|
+
def test_key_type_indifference
|
26
|
+
hash = {
|
27
|
+
"title" => "My Title",
|
28
|
+
"authors" => [
|
29
|
+
{ "id" => 1, "name" => "Mike Anderson" },
|
30
|
+
{ "id" => 2, "name" => "Well D." }
|
31
|
+
],
|
32
|
+
"active" => false
|
33
|
+
}
|
34
|
+
|
35
|
+
book = Dish::Plate.new(hash)
|
36
|
+
assert_equal "My Title", book.title
|
37
|
+
assert_equal 2, book.authors.length
|
38
|
+
assert_equal "Well D.", book.authors[1].name
|
39
|
+
assert_equal true, book.title?
|
40
|
+
assert_equal false, book.active
|
41
|
+
assert_equal false, book.active?
|
42
|
+
end
|
43
|
+
|
24
44
|
def test_hash_helper
|
25
45
|
hash = { a: 1, b: 2 }
|
26
46
|
dish = Dish(hash)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lasse Bunk
|
@@ -47,6 +47,7 @@ extensions: []
|
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
49
|
- ".gitignore"
|
50
|
+
- ".travis.yml"
|
50
51
|
- Gemfile
|
51
52
|
- LICENSE.txt
|
52
53
|
- README.md
|
@@ -56,6 +57,8 @@ files:
|
|
56
57
|
- lib/dish/ext.rb
|
57
58
|
- lib/dish/ext/array.rb
|
58
59
|
- lib/dish/ext/hash.rb
|
60
|
+
- lib/dish/helper.rb
|
61
|
+
- lib/dish/motion.rb
|
59
62
|
- lib/dish/plate.rb
|
60
63
|
- lib/dish/version.rb
|
61
64
|
- test/dish_test.rb
|