amember_pro 0.1.1 → 0.2.0

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/README.md CHANGED
@@ -62,6 +62,32 @@ methods (by-login-pass, by-login, by-email) can be called:
62
62
 
63
63
  Refer to this [document](http://www.amember.com/docs/REST) for all the parameters you can use
64
64
 
65
+ ## Parameters And Nested Parameters
66
+
67
+ You can use the Parameters and Nested class, if you prefer constructing
68
+ parameters in Ruby way:
69
+
70
+ # ADDING AN INVOICE
71
+
72
+ # Create an invoice item parameters
73
+ invoice_item = AmemberPro::Parameters.new do |i|
74
+ i.item_id 20
75
+ i.item_title "My Product"
76
+ i.first_price 11.00
77
+ end
78
+
79
+ # Nest it
80
+ invoice_nested = AmemberPro::Parameters::Nested.new("invoice-items") do |inv|
81
+ inv << invoice_item
82
+ end
83
+
84
+ # Bind it to a user and call the add invoice api
85
+ invoice = AmemberPro::Parameters.new
86
+ invoice.user_id 140
87
+ invoice.nested invoice_nested
88
+
89
+ AmemberPro::Invoices.add invoice
90
+
65
91
  ## Contributing
66
92
 
67
93
  1. Fork it ( http://github.com/pyodor/amember_pro/fork )
@@ -4,6 +4,7 @@ require "amember_pro/users"
4
4
  require "amember_pro/invoices"
5
5
  require "amember_pro/products"
6
6
  require "amember_pro/check_access"
7
+ require "amember_pro/parameters"
7
8
 
8
9
  module AmemberPro
9
10
  END_POINT = 'api'
@@ -21,7 +22,7 @@ module AmemberPro
21
22
 
22
23
  def connection(controller)
23
24
  method = self.method
24
- params = self.params
25
+ params = self.params.to_hash
25
26
  api = "/#{self::END_POINT}/#{controller.to_s}"
26
27
 
27
28
  if method == Method::PUT or method == Method::DELETE
@@ -30,7 +31,7 @@ module AmemberPro
30
31
 
31
32
  params[:_key] = self.access_key
32
33
  conn = Faraday.new(:url => self.url, :ssl => {:verify => false})
33
-
34
+
34
35
  case method
35
36
  when Method::GET
36
37
  conn.get api, params
@@ -0,0 +1,119 @@
1
+ module AmemberPro
2
+ class Parameters
3
+ attr_accessor :parameters
4
+ attr_accessor :key
5
+ attr_accessor :value
6
+ attr_accessor :args
7
+
8
+ def method_missing method, *args
9
+ self.args = args
10
+ self.key = method.to_s
11
+ self.value = self.args[0]
12
+
13
+ case method
14
+ when :format
15
+ underscore_prefix
16
+ self.value ||= 'json'
17
+ when :count
18
+ underscore_prefix
19
+ self.value ||= '20'
20
+ when :page
21
+ underscore_prefix
22
+ self.value ||= '0'
23
+ when :filter
24
+ underscore_prefix
25
+ filterify
26
+ end
27
+ add self.key.to_s, self.value.to_s
28
+ end
29
+
30
+ def delete key
31
+ self.parameters.to_hash.delete(key.to_s)
32
+ end
33
+
34
+ def nested nest
35
+ unless nest.is_a? AmemberPro::Parameters::Nested
36
+ raise "Nest must be of type AmemberPro::Parameters::Nested"
37
+ end
38
+ self.parameters.merge!(nest.to_hash)
39
+ end
40
+
41
+ def underscore_prefix
42
+ self.key = self.key.insert(0, '_')
43
+ end
44
+
45
+ def initialize &block
46
+ self.parameters = Hash.new
47
+ self.instance_eval(&block) if block_given?
48
+ end
49
+
50
+ def add key, value
51
+ self.parameters[key.to_s] = value.to_s
52
+ self.parameters
53
+ end
54
+
55
+ def to_hash
56
+ self.to_s
57
+ end
58
+
59
+ def to_s
60
+ current_params
61
+ end
62
+
63
+ private
64
+
65
+ def filterify
66
+ fieldname = self.args[0]
67
+ self.key = "#{self.key}[#{fieldname}]"
68
+ self.value = args[1]
69
+ end
70
+
71
+ def current_params
72
+ self.parameters
73
+ end
74
+
75
+
76
+ class Nested
77
+ attr_accessor :nest
78
+ attr_accessor :args
79
+ attr_accessor :nested
80
+
81
+ def initialize nest, &block
82
+ self.nest = nest.to_s
83
+ self.args = []
84
+ self.instance_eval(&block) if block_given?
85
+ nestify
86
+ end
87
+
88
+ def << params
89
+ unless params.is_a? AmemberPro::Parameters
90
+ raise "params must be of type AmemberPro::Parameters"
91
+ end
92
+ self.args << params.to_hash
93
+ end
94
+
95
+ def to_hash
96
+ self.to_s
97
+ end
98
+
99
+ def to_s
100
+ self.nested
101
+ end
102
+
103
+ def nestify
104
+ self.nested = Hash.new
105
+ unless self.args.empty?
106
+ self.args.each_with_index do |arg, index|
107
+ n = "nested[#{self.nest}][#{index}]"
108
+ arg.each do |key,val|
109
+ k = "#{n}[#{key}]"
110
+ self.nested[k] = val
111
+ end
112
+ end
113
+ else
114
+ self.nested["_nested[]"] = self.nest
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -1,3 +1,3 @@
1
1
  module AmemberPro
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amember_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-02 00:00:00.000000000 Z
12
+ date: 2014-07-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -109,6 +109,7 @@ files:
109
109
  - lib/amember_pro.rb
110
110
  - lib/amember_pro/check_access.rb
111
111
  - lib/amember_pro/invoices.rb
112
+ - lib/amember_pro/parameters.rb
112
113
  - lib/amember_pro/products.rb
113
114
  - lib/amember_pro/users.rb
114
115
  - lib/amember_pro/version.rb