acfs 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
19
+ *.iml
20
+ .rakeTasks
21
+ .rvmrc
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --backtrace
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - jruby
6
+
7
+ gemfile:
8
+ - gemfiles/Gemfile.rails-3-1
9
+ - gemfiles/Gemfile.rails-3-2
10
+ - gemfiles/Gemfile.rails-head
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in acfs.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec' do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara features specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Jan Graichen
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # Acfs - *API Client for Services*
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/acfs.png)](http://badge.fury.io/rb/acfs) [![Build Status](https://travis-ci.org/jgraichen/acfs.png?branch=master)](https://travis-ci.org/jgraichen/acfs) [![Coverage Status](https://coveralls.io/repos/jgraichen/acfs/badge.png?branch=master)](https://coveralls.io/r/jgraichen/acfs) [![Code Climate](https://codeclimate.com/github/jgraichen/acfs.png)](https://codeclimate.com/github/jgraichen/acfs) [![Dependency Status](https://gemnasium.com/jgraichen/acfs.png)](https://gemnasium.com/jgraichen/acfs)
4
+
5
+ TODO: Develop asynchronous parallel API client library for service oriented applications.
6
+
7
+ TODO: Write a gem description
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ gem 'acfs'
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install acfs
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ### Acfs::Attributes
28
+
29
+ ```ruby
30
+ class MyModel
31
+ include Acfs::Attributes
32
+
33
+ attribute :name, :string
34
+ attribute :age, :integer, default: 15
35
+ end
36
+
37
+ MyModel.attributes # => { "name" => "", "age" => 15 }
38
+
39
+ mo = MyModel.new name: 'Johnny', age: 12
40
+ mo.name # => "Johnny"
41
+ mo.age = '13'
42
+ mo.age # => 13
43
+ mo.attributes # => { "name" => "Johnny", "age" => 13 }
44
+
45
+ ```
46
+
47
+ ## TODO
48
+
49
+ * Library Code
50
+ * Documentation
51
+
52
+ ## Contributing
53
+
54
+ 1. Fork it
55
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
56
+ 3. Add specs for your feature
57
+ 4. Implement your feature
58
+ 5. Commit your changes (`git commit -am 'Add some feature'`)
59
+ 6. Push to the branch (`git push origin my-new-feature`)
60
+ 7. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/acfs.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'acfs/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "acfs"
8
+ spec.version = Acfs::VERSION
9
+ spec.authors = ['Jan Graichen']
10
+ spec.email = %w(jg@altimos.de)
11
+ spec.description = %q{API Client For Services}
12
+ spec.summary = %q{An abstract API base client for service oriented application.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = %w(lib)
20
+
21
+ spec.add_runtime_dependency 'activesupport'
22
+ spec.add_runtime_dependency 'activemodel'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.3'
25
+ spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rspec'
27
+ spec.add_development_dependency 'guard-rspec'
28
+ spec.add_development_dependency 'coveralls'
29
+ end
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in acfs.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'activesupport', '~> 3.1.0'
7
+ gem 'activemodel', '~> 3.1.0'
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in acfs.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'activesupport', '~> 3.2.0'
7
+ gem 'activemodel', '~> 3.2.0'
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in acfs.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'activesupport', github: 'rails/rails'
7
+ gem 'activemodel', github: 'rails/rails'
data/lib/acfs.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'active_support'
2
+ require 'acfs/version'
3
+
4
+ module Acfs
5
+ extend ActiveSupport::Autoload
6
+
7
+ autoload :Client
8
+ autoload :Base
9
+
10
+ autoload :Model
11
+ autoload :Attributes
12
+ autoload :Initialization
13
+
14
+ end
@@ -0,0 +1,105 @@
1
+ module Acfs
2
+
3
+ # == Acfs Attribute
4
+ #
5
+ # Allows to specify attributes of a class with default values and type safety.
6
+ #
7
+ # class User
8
+ # include Acfs::Attributes
9
+ #
10
+ # attribute :name, :string, default: 'Anon'
11
+ # attribute :age, :integer
12
+ # attribute :special, My::Special::Type
13
+ # end
14
+ #
15
+ # For each attribute a setter and getter will be created and values will be
16
+ # type casted when set.
17
+ #
18
+ module Attributes
19
+ def self.included(base) # :nodoc:
20
+ base.class_eval do
21
+ extend ClassMethods
22
+ include InstanceMethods
23
+ end
24
+ end
25
+
26
+ module InstanceMethods # :nodoc:
27
+
28
+ def initialize(*attrs) # :nodoc:
29
+ self.class.attributes.each { |k, v| send :"#{k}=", v }
30
+ super
31
+ end
32
+
33
+ # Returns ActiveModel compatible list of attributes and values.
34
+ #
35
+ # class User
36
+ # attribute :name, type: String, default: 'Anon'
37
+ # end
38
+ # user = User.new(name: 'John')
39
+ # user.attributes # => { "name" => "John" }
40
+ #
41
+ def attributes
42
+ self.class.attributes.keys.inject({}) { |h, k| h[k.to_s] = send k; h }
43
+ end
44
+ end
45
+
46
+ module ClassMethods # :nodoc:
47
+
48
+ # Define a model attribute by name and type. Will create getter and
49
+ # setter for given attribute name. Existing methods will be overridden.
50
+ #
51
+ # class User
52
+ # attribute :name, type: String, default: 'Anon'
53
+ # end
54
+ #
55
+ # Available types can be found in `Acfs::Attributes::*`.
56
+ #
57
+ def attribute(*attrs)
58
+ opts = attrs.extract_options!
59
+ type = opts.delete(:type) || :string
60
+
61
+ if type.is_a? Symbol or type.is_a? String
62
+ type = "::Acfs::Attributes::#{type.to_s.classify}".constantize
63
+ end
64
+
65
+ attrs.each do |attr|
66
+ define_attribute attr.to_sym, type, opts
67
+ end
68
+ end
69
+
70
+ # Return list of possible attributes and default values for this model class.
71
+ #
72
+ # class User
73
+ # attribute :name, String
74
+ # attribute :age, Integer, default: 25
75
+ # end
76
+ # User.attributes # => { "name": nil, "age": 25 }
77
+ #
78
+ def attributes
79
+ @attributes ||= {}
80
+ end
81
+
82
+
83
+ private
84
+ def define_attribute(name, type, opts = {}) # :nodoc:
85
+ @attributes ||= {}
86
+ @attributes[name] = type.cast opts.has_key?(:default) ? opts[:default] : nil
87
+
88
+ self.send :define_method, name do
89
+ instance_variable_get :"@#{name}"
90
+ end
91
+
92
+ self.send :define_method, :"#{name}=" do |value|
93
+ instance_variable_set :"@#{name}", type.cast(value)
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ # Load attribute type classes.
101
+ #
102
+ Dir[File.dirname(__FILE__) + "/attributes/*.rb"].sort.each do |path|
103
+ filename = File.basename(path)
104
+ require "acfs/attributes/#{filename}"
105
+ end
@@ -0,0 +1,15 @@
1
+ module Acfs::Attributes
2
+
3
+ # Integer attribute type. Use it in your model as an attribute type:
4
+ #
5
+ # class User
6
+ # attribute :name, :integer
7
+ # end
8
+ #
9
+ module Integer # :nodoc:
10
+
11
+ def self.cast(obj)
12
+ obj.to_i
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Acfs::Attributes
2
+
3
+ # String attribute type. Use it in your model as an attribute type:
4
+ #
5
+ # class User
6
+ # attribute :name, :string
7
+ # end
8
+ #
9
+ module String # :nodoc:
10
+
11
+ def self.cast(obj)
12
+ obj.to_s
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'active_support/core_ext/class/attribute_accessors'
2
+
3
+ module Acfs
4
+ module Client
5
+ def self.included(base)
6
+ base.class_eval do
7
+ cattr_accessor :base_url
8
+ end
9
+ end
10
+
11
+ def initialize
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,38 @@
1
+ module Acfs
2
+ module Initialization
3
+
4
+ # Initializes a new model with the given +params+.
5
+ #
6
+ # class User
7
+ # include Acfs::Model
8
+ # attribute :name
9
+ # attribute :email, default: -> { "#{name}@dom.tld" }
10
+ # attribute :age, :integer, default: 18
11
+ # end
12
+ #
13
+ # user = User.new(name: 'bob')
14
+ # user.name # => "bob"
15
+ # user.email # => "bob@dom.tld"
16
+ # user.age # => 18
17
+ #
18
+ def initialize(params={})
19
+ params.each do |attr, value|
20
+ self.public_send("#{attr}=", value)
21
+ end if params
22
+ end
23
+
24
+ # Indicates if the model is persisted. Default is +false+.
25
+ #
26
+ # class User
27
+ # include Acfs::Model
28
+ # attribute :name
29
+ # end
30
+ #
31
+ # user = User.new(name: 'bob')
32
+ # user.persisted? # => false
33
+ #
34
+ def persisted?
35
+ false
36
+ end
37
+ end
38
+ end
data/lib/acfs/model.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'active_model'
2
+
3
+ module Acfs
4
+ module Model
5
+ def self.included(base)
6
+ base.class_eval do
7
+ if ActiveModel::VERSION::MAJOR >= 4
8
+ include ActiveModel::Model
9
+ else
10
+ extend ActiveModel::Naming
11
+ extend ActiveModel::Translation
12
+ include ActiveModel::Conversion
13
+ include ActiveModel::Validations
14
+
15
+ include Acfs::Initialization
16
+ end
17
+
18
+ include Acfs::Attributes
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ module Acfs
2
+ module VERSION
3
+ MAJOR = 0
4
+ MINOR = 2
5
+ PATCH = 0
6
+ STAGE = nil
7
+
8
+ STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.')
9
+
10
+ def self.to_s; STRING end
11
+ end
12
+ end
@@ -0,0 +1,101 @@
1
+ require 'spec_helper'
2
+
3
+ describe Acfs::Attributes do
4
+ let(:model) { Class.new(MyModel) }
5
+
6
+ describe '#initialize' do
7
+ before { model.send :attribute, :name, default: 'John' }
8
+
9
+ it 'should have attribute list' do
10
+ expect(model.new.attributes).to include('name')
11
+ end
12
+
13
+ it 'should set default attributes' do
14
+ expect(model.new.name).to be == 'John'
15
+ end
16
+ end
17
+
18
+ describe '#attributes' do
19
+ before do
20
+ model.send :attribute, :name, default: 'John'
21
+ model.send :attribute, :age, type: :integer, default: 25
22
+ end
23
+
24
+ it 'should return hash of all attributes' do
25
+ expect(model.new.attributes).to be == {
26
+ 'name' => 'John',
27
+ 'age' => 25
28
+ }
29
+ end
30
+ end
31
+
32
+ describe '#_getter_' do
33
+ before { model.send :attribute, :name, default: 'John' }
34
+
35
+ it 'should return value' do
36
+ expect(model.new(name: 'Paul').name).to be == 'Paul'
37
+ end
38
+
39
+ it 'should return default value' do
40
+ expect(model.new.name).to be == 'John'
41
+ end
42
+
43
+ it 'should return matching ivar\'s value' do
44
+ o = model.new
45
+ o.instance_variable_set :@name, 'Johannes'
46
+
47
+ expect(o.name).to be == 'Johannes'
48
+ end
49
+ end
50
+
51
+ describe '#_setter_' do
52
+ before { model.send :attribute, :name, default: 'John' }
53
+
54
+ it 'should set value' do
55
+ o = model.new
56
+ o.name = 'Paul'
57
+
58
+ expect(o.name).to be == 'Paul'
59
+ end
60
+
61
+ it 'should set instance var' do
62
+ o = model.new
63
+ o.name = 'Paul'
64
+
65
+ expect(o.instance_variable_get(:@name)).to be == 'Paul'
66
+ end
67
+
68
+ it 'should update attributes hash' do
69
+ o = model.new
70
+ o.name = 'Johannes'
71
+
72
+ expect(o.attributes['name']).to be == 'Johannes'
73
+ end
74
+ end
75
+
76
+ describe '.attribute' do
77
+ it 'should add an attribute to model attribute list' do
78
+ model.send :attribute, :name
79
+
80
+ expect(model.attributes).to be == { :name => '' }
81
+ end
82
+
83
+ it 'should accept a default value' do
84
+ model.send :attribute, :name, default: 'John'
85
+
86
+ expect(model.attributes).to be == { :name => 'John' }
87
+ end
88
+
89
+ it 'should accept an symbolic type' do
90
+ model.send :attribute, :age, type: :integer, default: '12'
91
+
92
+ expect(model.attributes).to be == { :age => 12 }
93
+ end
94
+
95
+ it 'should accept an class type' do
96
+ model.send :attribute, :age, type: Acfs::Attributes::Integer, default: '12'
97
+
98
+ expect(model.attributes).to be == { :age => 12 }
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Acfs::Client do
4
+ let(:client) { MyClient }
5
+
6
+ it "should have a base_url configuration option" do
7
+ client.base_url = 'http://abc.de/api/v1'
8
+
9
+ expect(client.base_url).to eq('http://abc.de/api/v1')
10
+ end
11
+
12
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Acfs::Initialization do
4
+ let(:model) { MyModel }
5
+
6
+ describe '#initialize' do
7
+ it 'should allow to set attributes with initializer' do
8
+ model = MyModel.new(name: "John")
9
+ expect(model.name).to be == "John"
10
+ end
11
+
12
+ it 'should raise error when attributes with private setters are given' do
13
+ expect { MyModel.new(age: 25) }.to raise_error(NoMethodError)
14
+ end
15
+ end
16
+
17
+ describe '#persisted?' do
18
+ it 'should be false' do
19
+ expect(MyModel.new.persisted?).to be_false
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ require 'acfs'
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+
5
+ Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f}
6
+
7
+ RSpec.configure do |config|
8
+ # ## Mock Framework
9
+ #
10
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
11
+ #
12
+ # config.mock_with :mocha
13
+ # config.mock_with :flexmock
14
+ # config.mock_with :rr
15
+
16
+ # Run specs in random order to surface order dependencies. If you find an
17
+ # order dependency and want to debug it, you can fix the order by providing
18
+ # the seed, which is printed after each run.
19
+ # --seed 1234
20
+ config.order = "random"
21
+
22
+ config.expect_with :rspec do |c|
23
+ # Only allow expect syntax
24
+ c.syntax = :expect
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+
2
+ class MyClient
3
+ include Acfs::Client
4
+
5
+ end
6
+
7
+ class MyModel
8
+ include Acfs::Model
9
+
10
+ attr_accessor :name, :age
11
+ private :age=
12
+ end
metadata ADDED
@@ -0,0 +1,194 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acfs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jan Graichen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: activemodel
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.3'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: guard-rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: coveralls
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: API Client For Services
127
+ email:
128
+ - jg@altimos.de
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - .rspec
135
+ - .travis.yml
136
+ - Gemfile
137
+ - Guardfile
138
+ - LICENSE.txt
139
+ - README.md
140
+ - Rakefile
141
+ - acfs.gemspec
142
+ - gemfiles/Gemfile.rails-3-1
143
+ - gemfiles/Gemfile.rails-3-2
144
+ - gemfiles/Gemfile.rails-head
145
+ - lib/acfs.rb
146
+ - lib/acfs/attributes.rb
147
+ - lib/acfs/attributes/integer.rb
148
+ - lib/acfs/attributes/string.rb
149
+ - lib/acfs/client.rb
150
+ - lib/acfs/initialization.rb
151
+ - lib/acfs/model.rb
152
+ - lib/acfs/version.rb
153
+ - spec/attributes_spec.rb
154
+ - spec/client_spec.rb
155
+ - spec/initialization_spec.rb
156
+ - spec/spec_helper.rb
157
+ - spec/support/my_client.rb
158
+ homepage: ''
159
+ licenses:
160
+ - MIT
161
+ post_install_message:
162
+ rdoc_options: []
163
+ require_paths:
164
+ - lib
165
+ required_ruby_version: !ruby/object:Gem::Requirement
166
+ none: false
167
+ requirements:
168
+ - - '>='
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ segments:
172
+ - 0
173
+ hash: 956482736488803723
174
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
+ none: false
176
+ requirements:
177
+ - - '>='
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ segments:
181
+ - 0
182
+ hash: 956482736488803723
183
+ requirements: []
184
+ rubyforge_project:
185
+ rubygems_version: 1.8.25
186
+ signing_key:
187
+ specification_version: 3
188
+ summary: An abstract API base client for service oriented application.
189
+ test_files:
190
+ - spec/attributes_spec.rb
191
+ - spec/client_spec.rb
192
+ - spec/initialization_spec.rb
193
+ - spec/spec_helper.rb
194
+ - spec/support/my_client.rb